2010-11-15 5 views
18

Je suis tellement confus ...volume de flux dans SOUNDPOOL vs volume AudioManager

SoundPool.play (int soundID, leftVolume flotteur, flotteur rightVolume, priorité int, boucle int, taux flottant)

le volume est ici de 0,0 à 1,0

Tutoriels J'ai vu recommander pour calculer le volume de flux comme:

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); 

qui ma KES SENS.

Je suppose que ce volume remplacerait le volume global de médias défini par l'utilisateur dans le téléphone et je peux changer le volume pour mon application indépendamment en changeant le volume de flux dans soundPool.

Mais en réalité, cela fonctionne comme un multiplicateur - si je mets 0,5 pour le volume dans soundpool, le volume réel sera toujours la moitié du volume global. Très facile à reproduire:

  1. régler le volume mondial des médias dans paramètres du téléphone au maximum
  2. volume défini en activité à l'aide soundpool.play à 0,5 - jouer son
  3. volume défini dans soundpool.play 1 - jeu son, il sera deux fois plus fort

Quelqu'un peut-il expliquer pourquoi cela fonctionne comme ça? est le volume passé à la méthode SoundPool.play vraiment un multiplicateur pour le volume global?

Répondre

25

Oui, les paramètres de volume sont par rapport au volume global. Si vous voulez jouer un son avec le volume actuel, il vous suffit de passer "1" comme volume.

+1

La documentation ne dit pas vraiment cela, elle dit juste de 0 à 1 et ne mentionne pas ce que 1 correspond à. J'étais sous l'impression 1 est le volume maximum de l'appareil, mais votre explication que 1 est le volume maximum du volume global actuel explique mon observation. – mishkin