2010-11-15 13 views
18

Sono così confuso ...flusso in Soundpool vs volume in AudioManager

SoundPool.play (int Soundid, galleggiante leftVolume, galleggiare rightVolume, int priorità, int loop, float rate)

il volume qui è da 0.0 a 1.0

tutorial che ho visto consiglia per calcolare il volume flusso come:

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

che mA è sensato.

Suppongo che questo volume annullerebbe il volume multimediale globale impostato dall'utente nel telefono e posso modificare il volume della mia app in modo indipendente modificando il volume del flusso in SoundPool.

Ma in realtà funziona come moltiplicatore - se imposto 0,5 per il volume in soundpool, il volume effettivo sarà sempre la metà di quello globale. Molto facile da riprodurre:

  1. impostare il volume globale dei media in impostazioni del telefono per max
  2. volume impostato nell'attività utilizzando soundpool.play a 0,5 - riprodurre l'audio del volume
  3. impostato in soundpool.play a 1 - il gioco suono, sarà due volte più forte

Qualcuno può spiegare perché funziona così? il volume è passato al metodo SoundPool.play in realtà un moltiplicatore per il volume globale?

risposta

25

Sì, i parametri del volume sono rispetto al volume globale. Se si desidera riprodurre un suono con l'impostazione del volume corrente, basta passare "1" come volume.

+1

documentazione in realtà non lo dice, dice solo da 0 a 1 e non menziona a cosa corrisponde 1. Ero sotto impressione 1 è il volume massimo del dispositivo, ma la tua spiegazione che 1 è il volume massimo del volume globale corrente spiega la mia osservazione. – mishkin

Problemi correlati