私はとても混乱しています...
SoundPool.play(int soundID, float leftVolume, float rightVolume , int priority, int loop, float rate)
ボリュームは 0.0 から 1.0 です
私が見たチュートリアルでは、ストリーム ボリュームを次のように計算することを推奨しています。
AudioManager mgr = (AudioManager) getContext().getSystemService(Context.AUDIO_SERVICE);
int streamVolume = mgr.getStreamVolume(AudioManager.STREAM_MUSIC);
streamVolume = streamVolume / AudioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
mSoundPool.play(mSoundPoolMap.get(index), streamVolume, streamVolume, 1, 0, 1f);
これは理にかなっています。
このボリュームは、ユーザーが電話で設定したグローバル メディア ボリュームをオーバーライドし、soundPool のストリーム ボリュームを変更することで、アプリのボリュームを個別に変更できると想定します。
しかし、実際には乗数のように機能します。サウンドプールのボリュームに 0.5 を設定すると、実際のボリュームは常にグローバル ボリュームの半分になります。非常に簡単に再現できます:
- 電話設定でグローバル メディア ボリュームを最大に設定する
- soundpool.play を使用してアクティビティの音量を 0.5 に設定 - サウンドを再生
- soundpool.play のボリュームを 1 に設定します - サウンドを再生すると、2 倍の音量になります
誰かがなぜそれがそのように機能するのか説明できますか? SoundPool.play メソッドに渡されるボリュームは、本当にグローバル ボリュームの乗数ですか?