Programación y Desarrollo para Android Subforo exclusivo para temas de programación de software para PDAs y desarrollo de aplicaciones, interfaces, etc bajo Android


 
Herramientas
  #1  
Viejo 23/10/13, 17:23:57
Avatar de Davidwalter
Davidwalter Davidwalter no está en línea
Usuario novato en la web
Mensajes: 9
 
Fecha de registro: dic 2011
Mensajes: 9
Modelo de smartphone: Iphone
Tu operador: Movistar
Mencionado: 0 comentarios
Tagged: 0 hilos
¿hacer que pare un sonido dandole de nuevo a un boton?

Buenas, estoy creando una aplicacion de botones con sonidos, y mi pregunta era,
¿Como hago para que, despues de haberle dado al boton y mientras suena el sonido, dandole de nuevo mientras se reproduce el sonido, en vez de empezar de nuevo pare el sonido?
El codigo para utilizar el sonido es este:
Código:
int miAudio = -1;
SoundPool sP;

//ahora en el onCreate
sP = new SoundPool(1, AudioManager.STREAM_MUSIC, 0);
		 Button miboton = (Button) findViewById(R.id.miboton);
setVolumeControlStream(AudioManager.STREAM_MUSIC);

try {
AssetManager assetManager = getAssets();
AssetFileDescriptor sound1 = assetManager.openFd("misonido.mp3");
             miAudio = sP.load(sound1, 1);
}

 miboton.setOnClickListener(new View.OnClickListener() {
             public void onClick(View v) {
                     sP.play(miAudio, 1.0f, 1.0f, 1, 0, 1);
             }
     });
¿que tendria que añadir?
Responder Con Cita


  #2  
Viejo 23/10/13, 20:09:57
Avatar de kriogeN
kriogeN kriogeN no está en línea
Colaborador/a
Mensajes: 4,637
Compra y venta: (1)
 
Fecha de registro: oct 2010
Localización: Murcia
Mensajes: 4,637
Modelo de smartphone: Samsung Galaxy S7 Edge SM-G935F
Versión de ROM: CM13 - CM 11
Tu operador: Vodafone
Mencionado: 60 comentarios
Tagged: 3 hilos
No puedes de forma directa con SoundPool, sólo con MediaPlayer. Porque con SoundPool no puedes saber si el sonido se está reproduciendo o no, y por tanto no puedes saber si tienes que llamar a "stop" o a "play".

La librería ideal sería la combinación de ambas.

Puedes hacer una "chapucilla", que aunque no sea muy precisa puede ser que te resuelva el problema:

1) Creas un objeto MediaPlayer con MediaPlayer.create del mismo sonido que quieres reproducir.

2) Obtienes su duración con getDuration()

3) Cuando haces click en el botón por primera vez estableces una variable al tiempo actual del sistema (System.currentTimeMillis())

4) Las sucesivas veces compruebas si la última vez que pulsaste el botón ha pasado menos tiempo que la duración del sonido, y en ese caso llamas a "stop". Si ya ha pasado el tiempo llamas a "play".

Los pasos 1 y 2 lo mejor es hacerlo al mismo tiempo que creas el SoundPool en el onCreate, y no cada vez que vas a reproducir el sonido. Porque si no pierdes la ventaja de usar SoundPool. Obviamente necesitarás tantas variables (de duración y de tiempo de la última vez) como sonidos tengas.

Y repito, no es muy preciso, ya que puede haber ligeras diferencias de tiempo, pero creo que te resolverá el problema.

EDITO: Recuerda cerrar los MediaPlayer después de obtener las duraciones.

Última edición por kriogeN Día 23/10/13 a las 20:12:23
Responder Con Cita
Respuesta

Estás aquí
Regresar   HTCMania > Todo sobre Android > Programación y Desarrollo para Android


Reglas de Mensajes
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Las caritas están On
Código [IMG] está On
Código HTML está Off

Saltar a Foro



Hora actual: 17:54:43 (GMT +1)

Cookies settings
Powered by vBulletin™
Copyright © vBulletin Solutions, Inc. All rights reserved.
 
HTCMania: líderes desde el 2007