2010-11-15 17 views
18

Estoy tan confundido ...volumen corriente en soundpool vs volumen en AudioManager

SoundPool.play (int soundID, flotador leftVolume, flotar rightVolume, int priority, bucle int, float tasa)

volumen que aquí es de 0,0 a 1,0

tutoriales que he visto recomiendan para calcular el volumen corriente como:

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

la que ma kes sense.

Supongo que este volumen anulará el volumen global de medios establecido por el usuario en el teléfono y puedo cambiar el volumen de mi aplicación de forma independiente al cambiar el volumen de la secuencia en SoundPool.

Pero en realidad funciona como un multiplicador: si configuro 0.5 para el volumen en el grupo de sonido, el volumen real siempre será la mitad del global. Muy fácil de reproducir:

  1. ajustar el volumen global de los medios en ajustes del teléfono a un máximo
  2. volumen establecido en la actividad utilizando soundpool.play a 0,5 - jugar volumen
  3. conjunto de sonidos en soundpool.play a 1 - juego sonido, será dos veces más fuerte

¿Alguien puede explicar por qué funciona así? ¿El volumen pasado al método SoundPool.play realmente es un multiplicador del volumen global?

Respuesta

25

Sí, los parámetros de volumen son con respecto al volumen global. Si desea reproducir un sonido con la configuración de volumen actual, simplemente pase "1" como volumen.

+1

La documentación realmente no dice eso, solo dice de 0 a 1 y no menciona a qué corresponde 1. Estaba bajo impresión 1 es el volumen máximo de dispositivo, pero su explicación de que 1 es el volumen máximo de volumen global actual explica mi observación. – mishkin

Cuestiones relacionadas