SoundPoolの音量を端末の音量から反映するには
Android(XPERIA)でゲームアプリを作るにあたり、BGMと着地音を出すことにした。
BGMにはMediaPlayerクラス、着地音にはSoundPoolクラスを使って効果音を出している。
// BGM -> bgm MediaPlayer mp = MediaPlayer.create(this, R.raw.bgm); mp.start(); // 着地音 -> dan SoundPool sp = new SoundPool(0, AudioManager.STREAM_MUSIC, 0); int soundID = sp.load(activity,R.raw.dan, 0); sp.play(soundID, 50, 50, 0, 0, 0);
ゲームをしていて音量が大きいと思いXPERIAの横にあるボリュームボタンで音量を下げると、
BGMのボリュームは下がっても着地音のボリュームは下がらなかった。
SoundPool.playメソッドの第二引数、第三引数で左右のスピーカーの音量を指定しているのが原因である。
そこでXPERIA本体の音量を取得し再生音量に反映することにした。
int ringVol = audio.getStreamVolume(AudioManager.STREAM_RING); SoundPool sp = new SoundPool(0, AudioManager.STREAM_MUSIC, 0); int soundID = sp.load(activity,R.raw.dan, 0); sp.play(soundID, ringVol, ringVol, 0, 0, 0);