2013年1月18日金曜日

オーディオフォーカス AudioManager.AUDIOFOCUS_GAIN

オーディオプログラムの開発メモ

ANDROIDで音を扱う場合、他のプログラムとのスピーカーの共有に気をつけなければいけません。
オーディオリスナーを登録しておけば監視ができます。

afChangeListener = new OnAudioFocusChangeListener() {
   public void onAudioFocusChange(int focusChange) {
       if (focusChange != AudioManager.AUDIOFOCUS_GAIN) {//フォーカスを奪われた
         
       Toast.makeText(getApplicationContext(), "AUDIOFOCUS_LOSS", Toast.LENGTH_SHORT).show();
       
       }else{//フォーカスが戻った
        Toast.makeText(getApplicationContext(), "AUDIOFOCUS_GAIN", Toast.LENGTH_LONG).show();
       }

   }
};
audio.requestAudioFocus(afChangeListener, AudioManager.STREAM_VOICE_CALL, AudioManager.AUDIOFOCUS_GAIN);

注意点としては受話スピーカーなど出力先を決めている場合に出力先が変えられてしまう事が有ります。

・スピーカーの権限を奪う
AudioManager.AUDIOFOCUS_GAIN
AudioManager.AUDIOFOCUS_GAIN_TRANSIENT

・スピーカーの権限を奪わない
AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK

ANDROIDのバージョンによって出力先の権利が先取りか後取り異なる場合があります。
2.X系は先取り優先
4.X系は後取り優先

問題なのは受話スピーカーと背面スピーカーの音量差です。
受話スピーカーから背面スピーカーに切り替わると、音量が約三倍になります。



0 件のコメント:

コメントを投稿