Я так запутался...
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 метод действительно множителем для глобального тома?