громкость потока в SoundPool против громкости в AudioManager

Я так запутался ...

SoundPool.play (int soundID, float leftVolume, float rightVolume , int priority, int loop, float rate)

объем здесь от 0,0 до 1,0

Учебники I ' Мы видели, что рекомендуется рассчитывать объем потока как:

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, является множителем глобального объема?

18
задан trgraglia 30 January 2012 в 09:48
поделиться