громкость потока в 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 для громкости в звуковом пуле, фактическая громкость всегда будет вдвое меньше глобальной. Очень легко воспроизвести:

  1. установить глобальную громкость мультимедиа в настройках телефона на максимум
  2. установить громкость в активности с помощью soundpool.play на 0,5 - воспроизвести звук
  3. установить громкость в soundpool.play на 1 - проигрывать звук, он будет в два раза громче

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


person mishkin    schedule 15.11.2010    source источник


Ответы (1)


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

person Darrell    schedule 29.11.2010
comment
документация на самом деле не говорит об этом, а просто говорит от 0 до 1 и не упоминает, чему соответствует 1. У меня сложилось впечатление, что 1 - это максимальный объем устройства, но ваше объяснение, что 1 - это максимальный объем текущего глобального объема, объясняет мое наблюдение. - person mishkin; 30.11.2010