Я так растерялся ...
SoundPool.play (int soundID, float leftVolume, float rightVolume , приоритет int, int loop, скорость float)
объем здесь от 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.play на 0,5 - воспроизвести звук
- установить громкость в soundpool.play на 1 - воспроизводить звук, он будет в два раза громче
Может кто-нибудь объяснить, почему это так работает? действительно ли объем, передаваемый методу SoundPool.play, действительно является множителем глобального объема?