私は Android API を読み、カスタムの宣言についてインターネット上で検索し、audioSessionId
それを使用してaudioSessionId
AudioFx クラスを初期化し、MediaPlayer または AudioTrack をハードコードされaudioSessionId
た .
このメソッドを使用すると、最初に AudioFx を作成し、後で新しい MediaPlayer または AudioTrack を this にアタッチできますaudioSessionId
。
現在、Android 2.3.6 でこのメソッドを使用できますが、Android 4.x では、初期化が失敗するというエラーの問題が発生しています。または、他の ICS/JellyBean デバイスでは、このエラーは表示されませんが、関数を呼び出すと例外が発生します。
Samsung Galaxy S II [Android 4.0.3]: [Android 4.0.4 では問題が発生しなくなりました]
E/AudioEffect(13250): set(): AudioFlinger could not create effect, status: -38
E/AudioEffects-JNI(13250): AudioEffect initCheck failed -5
E/AudioEffect-JAVA(13250): Error code -5 when initializing AudioEffect.
W/WrapEqualizer(13250): createEqualizer() -> Effect library not loaded
Motorola Xoom [Android 4.1.2]
コンストラクターの後に黙って失敗するようです。次に getProperties() を呼び出すと、クラッシュします。
java.lang.RuntimeException: AudioEffect: set/get parameter error
at android.media.audiofx.AudioEffect.checkStatus(AudioEffect.java:1247)
at android.media.audiofx.Equalizer.getProperties(Equalizer.java:532)
Nexus 4 [Android 4.2.1]
audioSessionId=0 を使用するとすべて正常に動作しますが、他の番号を使用すると、プリセット、バンド レベル、バス ブーストをオンまたはバーチャライザーをオンに変更しようとするたびに、デバイスは次のサイレント エラーを報告します。報告されるエフェクト ID は、変更しようとしている FX によって異なります。
W/AudioPolicyManagerBase(165): unregisterEffect() unknown effect ID 1381
2012 年 8 月 11 日更新:
0 として
使用できますaudioSessionId
。非推奨であることはわかっていますが、パーミッションを使用して動作します。<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
オーディオ セッション ID 0 で AudioFx を使用する必要がありますか?