PDA

Ver la Versión Completa : Detectar y reproducir sonidos


frank1986
10/08/12, 13:45:07
Hola chic@s,

Veréis he creado mi primer juego, el cual, en una parte de él, cada vez que pulsas la pantalla se reproduce un sonido. Está realizado sobre la clase SurfaceView (por si es de importancia saber eso). Bueno, el caso es que consigo que se reproduzca y todo va perfectamente, pero ahora una vez que he terminado el juego me he dado cuenta que el sonido del juego se reproduce absolutamente siempre, es decir, aunque el móvil esté en silencio o sólo en vibración, el sonido se escucha. Yo pensaba que era por el móvil pero no, no lo es y es por eso por lo que os pregunto, cómo detecto si el sonido del móvil está habilitado o no para reproducir sonidos????? Si me ha ocurrido poner en las opciones del juego o algún otro lado lo típico de "Silenciar/Reproducir sonidos" pero me niego si hay una solución para detectar si está habilitado o no en el móvil ..... Por si os sirve, ésta forma es la que utilizo para reproducir los sonidos, por si no lo estoy haciendo bien:

Creo el sonido:

sonido = new SoundPool(10, AudioManager.STREAM_MUSIC,0);
mi_sonido= sonido.load(context, R.raw.audio, 1);

Y cuando lo necesito lo reproduzco así:

sonido.play(mi_sonido, 1.0f, 1.0f, 0, 0, 1.5f);

No se si lo que quiero es porque no he echo bien lo anterior, porque lo hice de ejemplos en ingles y demás ......

Un saludo.

mocelet
10/08/12, 13:59:40
Te lo copio-pego de mi cuatro en raya, que a su vez debí copiar de algún sitio... Con esto el volumen es el volumen que haya configurado, respetando la configuración del usuario.


AudioManager mgr = (AudioManager) c.getSystemService(Context.AUDIO_SERVICE);
float streamVolumeCurrent = mgr
.getStreamVolume(AudioManager.STREAM_MUSIC);
float streamVolumeMax = mgr
.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
float volume = streamVolumeCurrent / streamVolumeMax;

/* Play the sound with the correct volume */
if (soundPool != null) soundPool.play(soundPoolMap.get(sound), volume, volume, 1, 0, 1f);

frank1986
11/08/12, 15:40:32
Pues se me sigue escuchando siempre :S, aunque el sonido esté quitado y sólo en vibración. A ver he puesto el código que has puesto en el constructor (onCreate) y guardo el volumen en una variable privada global, luego cuando necesito reproducir pues utilizo el código para reproducir el sonido con esa variable de volumen, pero nada .... se escucha siempre ....

¿Alguna idea?

mocelet
11/08/12, 15:44:35
El volumen tienes que calcularlo antes de reproducir cada sonido, si lo haces solo en el onCreate ha podido cambiar unas cuantas veces el volumen y no te enteras.

frank1986
11/08/12, 18:42:13
Despiste mio :S. Pero de todas formas, si abro la aplicación con el sonido quitado, no se debería de escuchar nada, pero se escucha perfectamente.

mocelet
11/08/12, 18:46:18
Estás seguro de tener el volumen multimedia en silencio? El volumen de llamada o la vibración no afectan.