23

我感到很困惑...

SoundPool.play(int soundID, float leftVolume, float rightVolume , int 优先级, 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 - 播放声音,声音会大两倍

有人可以解释为什么它会这样工作吗?传递给 SoundPool.play 方法的音量真的是全局音量的乘数吗?

4

1 回答 1

29

是的,音量参数与全局音量有关。如果您想以当前音量设置播放声音,只需传递“1”作为音量。

于 2010-11-29T22:23:50.747 回答