我感到很困惑...
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,实际音量将始终是全局音量的一半。非常容易复制:
- 将手机设置中的全局媒体音量设置为最大
- 使用 soundpool.play 将活动音量设置为 0.5 - 播放声音
- 将 soundpool.play 中的音量设置为 1 - 播放声音,声音会大两倍
有人可以解释为什么它会这样工作吗?传递给 SoundPool.play 方法的音量真的是全局音量的乘数吗?