SoundPool中的流量与AudioManager中的音量

mis*_*kin 18 android soundpool android-audiomanager

我感到很困惑...

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);
Run Code Online (Sandbox Code Playgroud)

这是有道理的.

我假设此卷将覆盖用户在手机中设置的全局媒体卷,我可以通过更改soundPool中的流量来独立更改我的应用的音量.

但实际上它就像乘数一样 - 如果我在soundpool中设置0.5音量,实际音量将总是全局音量的一半.很容易重现:

  1. 将手机设置中的全局媒体音量设置为最大值
  2. 使用soundpool.play将活动中的音量设置为0.5 - 播放声音
  3. 将soundpool.play中的音量设置为1 - 播放声音,它会大两倍

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

Dar*_*ell 27

是的,音量参数与全局音量有关.如果您想以当前音量设置播放声音,只需将"1"作为音量.

  • 文档并没有真正这么说,它只是说从 0 到 1,并没有提到 1 对应什么。我的印象是 1 是设备的最大音量,但是您对 1 是当前全局音量的最大音量的解释解释了我的观察。 (2认同)