Потока в SoundPool и том в 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); 

Что имеет смысл.

Я бы предположил, что этот том изменит глобальный объем мультимедиа, установленный пользователем в телефоне, и я могу изменить объем для своего приложения независимо, изменив объем потока в soundPool.

Но на самом деле он работает как множитель – если я устанавливаю 0,5 для громкости в soundpool, фактический объем будет всегда половиной глобального. Очень легко воспроизводить:

  1. Установить общий объем мультимедиа в настройках телефона до максимального значения
  2. Установить громкость в действии с помощью soundpool.play до 0.5 – воспроизведение звука
  3. Установить громкость в soundpool.play на 1 – воспроизвести звук, он будет в два раза громче

Может ли кто-нибудь объяснить, почему он работает? Является ли объем, переданный SoundPool.play, действительно мультипликатором для глобального тома?

Solutions Collecting From Web of "Потока в SoundPool и том в AudioManager"

Да, параметры объема относятся к глобальному объему. Если вы хотите воспроизвести звук при текущей настройке громкости, просто передайте «1» в качестве громкости.