2017-11-23 18 views
0

네이티브 인토네이션 알고리즘을 조작하기 위해 기기에 다른 앱이있는 것으로 가정 할 때 앱에서 오디오 스트림을 상속하고 활성화 (효과를 나타냄)하는 방법 (bassboost, equalizer, 기타).시스템 전체 (네이티브) 오디오 효과를 미디어 플레이어 응용 프로그램에 상속하는 방법은 무엇입니까?

API 문서는이를 달성하는 방법에 대해 명확하지 않습니다.

다음

작동, 또는 불충분되지 않습니다

Equalizer equalizer = new Equalizer(0, mediaPlayer.getAudioSessionId()); 
         equalizer.setEnabled(true); 

         mediaPlayer.prepare(); 
         mediaPlayer.start(); 

답변

0

나 자신을 응답 할 수 있습니다. 확실한 해결책은 다음과 같아야합니다 :

Equalizer.inheritSystemEq() 

나는 다음과 같은 성가신 방법으로 만 작업 할 수 있습니다. 솔루션은 더 이상 사용되지 않지만 지원되지 않는 솔루션은 대체 API로 대체되지 않았습니다. 마지막으로

Equalizer equalizerSystem = new Equalizer(0, 0) //0 as second parameter is deprecated. 
//get current eq settings for global mix out 
short band0 = equalizerSystem.getBandLevel((short) 0); 
short band1 = equalizerSystem.getBandLevel((short) 1); 
short band2 = equalizerSystem.getBandLevel((short) 2); 
short band3 = equalizerSystem.getBandLevel((short) 3); 
short band4 = equalizerSystem.getBandLevel((short) 4); 

equalizerSystem.release(); 

//copy these "system" values (Set by another equalizer app) into 
//another equalizer instance particular for this audio session. 

Equalizer equalizer = new Equalizer(0, mediaPlayer.getAudioSessionId()); 
equalizer.setEnabled(true); 
equalizer.setBandLevel((short) 0, band0); 
equalizer.setBandLevel((short) 1, band1); 
equalizer.setBandLevel((short) 2, band2); 
equalizer.setBandLevel((short) 3, band3); 
equalizer.setBandLevel((short) 4, band4); 

, 즉 연속적으로 호출 mediaPlayer.prepare() 또는 mediaPlayer.prepareAsync는, 그렇지 않으면 equalizerSystem = new Equalizer(0,0)이 작동하지 않습니다.

은 또한 AndroidManifest를 설정 :

<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/> 

설정을 반복하는 식의 변경을 채택하는, OnParameterChangeListener 통해이를 감지 할 필요가 별도로 존재한다.