23

私はとても混乱しています...

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 を設定すると、実際のボリュームは常にグローバル ボリュームの半分になります。非常に簡単に再現できます:

  1. 電話設定でグローバル メディア ボリュームを最大に設定する
  2. soundpool.play を使用してアクティビティの音量を 0.5 に設定 - サウンドを再生
  3. soundpool.play のボリュームを 1 に設定します - サウンドを再生すると、2 倍の音量になります

誰かがなぜそれがそのように機能するのか説明できますか? SoundPool.play メソッドに渡されるボリュームは、本当にグローバル ボリュームの乗数ですか?

4

1 に答える 1

29

はい、ボリューム パラメータはグローバル ボリュームに関するものです。現在の音量設定でサウンドを再生したい場合は、音量として「1」を渡すだけです。

于 2010-11-29T22:23:50.747 に答える