2016-04-23 7 views
0

Ich schreibe eine Mediaplayer App für den privaten Gebrauch in Delphi XE10 für Android. Ich würde gerne den Android Equalizer verwenden, weiß aber nicht wirklich wie. Die JEqualizer-Schnittstelle ist in Androidapi.JNI.Media verfügbar (wie auch andere Soundfx-Funktionen). Ich habe zwei spezifische Probleme:Wie benutze ich Equalizer oder BassBoost für TMediaplayer?

1.) Ich bin nicht sehr fortgeschritten bei der Erstellung von Delphi-Objekten von Android-Schnittstellen. Am Recht nur Folgendes zu tun:

var 
    equ : jequalizer; 
begin 
equ := tjequalizer.wrap((sharedactivitycontext.getsystemservice(tjcontext.JavaClass.AUDIO_SERVICE) as ILocalObject).getobjectid); 

2.) den Ausgleich erstellen ich die audiosession des Mediaplayer benötigen, die nicht in dem Delphi-Mediaplayer-Objekt ausgesetzt ist. Irgendeine Idee, wie ich das bekommen könnte?

Antwort

0

Nach viel experimentieren mit Misserfolgen fand ich schließlich die Antwort selbst. Der erste Teil der Antwort ist, dass es nicht möglich ist, die Audioeffekte mit dem Delphi-Mediaplayer-Objekt zu verwenden. Allerdings: Es ist möglich, wenn Sie den Android Mediaplayer selbst erstellen. In diesem Fall wird die resultierende App natürlich nicht mehr plattformübergreifend sein. Also für alle, die es vielleicht brauchen, hier ist die Lösung als Code für den Bass-Boost-Effekt:

var //shoud be no local variables of course, but defined in your forms scope 
    mp: JMediaPlayer; 
    bb: JBassboost; 
begin 
    mp := tjmediaplayer.Create; 
    mp.reset; 
    mp.setdatasource(StringToJString(Edit1.text)); // in edit1.text I have the path to an mp3 file 
    mp.prepare; 
    mp.start; //now the mediaplayer is playing music 
    bb := tjbassboost.javaclass.init(0, mp.getAudioSessionId); 
    bb.setEnabled(true); 
    bb.setStrength(1000); //value 0-1000. now the effect is applied 
end;