Подтвердить что ты не робот

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

  • установить глобальный объем мультимедиа в настройки телефона до max
  • установить громкость в действии с помощью soundpool.play to 0.5 - воспроизвести звук
  • установить громкость в soundpool.play на 1 - воспроизвести звук, он будет в два раза громче

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

4b9b3361

Ответ 1

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