SoundPool 中的流音量与 AudioManager 中的音量
Posted
技术标签:
【中文标题】SoundPool 中的流音量与 AudioManager 中的音量【英文标题】:stream volume in SoundPool vs volume in AudioManager 【发布时间】:2011-05-10 00:28:24 【问题描述】:我很困惑……
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 中的流音量来独立更改我的应用的音量。
但实际上它的工作原理类似于乘数 - 如果我将 soundpool 中的音量设置为 0.5,则实际音量将始终是全局音量的一半。非常容易复制:
-
设置全局媒体音量
手机设置到最大
使用 soundpool.play 将活动音量设置为 0.5 - 播放声音
将 soundpool.play 中的音量设置为 1 - 播放声音,声音会大两倍
有人能解释一下为什么会这样吗?传递给 SoundPool.play 方法的音量真的是全局音量的乘数吗?
【问题讨论】:
【参考方案1】:是的,音量参数与全局音量有关。如果您想以当前音量设置播放声音,只需传递“1”作为音量。
【讨论】:
文档并没有真正这么说,它只是说从 0 到 1,并没有提到 1 对应什么。我的印象是 1 是设备的最大音量,但您对 1 是当前全局音量的最大音量的解释解释了我的观察。以上是关于SoundPool 中的流音量与 AudioManager 中的音量的主要内容,如果未能解决你的问题,请参考以下文章