2016-04-23 5 views
0

Я пишу приложение mediaplayer для частного использования в Delphi XE10 для Android. Я хотел бы использовать эквалайзер для Android, но не знаю, как это сделать. Интерфейс JEqualizer отображается в Androidapi.JNI.Media (как и другие функции soundfx). У меня есть две специфические проблемы:Как использовать эквалайзер или BassBoost для TMediaplayer?

1.) Я не очень продвинутый в создании объектов delphi из интерфейсов android. Am право просто сделать следующее:

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

2.) Для того, чтобы создать эквалайзер мне нужно audiosession от медиаплеера, который не подвергается в объекте MediaPlayer Delphi. Любая идея, как я мог это получить?

ответ

0

После многих экспериментов с ошибками я наконец нашел ответ сам. Первая часть ответа заключается в том, что не представляется возможным использовать звуковые эффекты с объектом delphi tmediaplayer. Однако: Это возможно, если вы сами создаете медиа-плеер android. В этом случае, конечно, результирующее приложение больше не будет кросс-платформенным. Для всех, кому это может понадобиться, вот решение как код для эффекта басового эффекта:

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;