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 02/10/13, 19:36:37
Avatar de kaiser75
kaiser75 kaiser75 no está en línea
Miembro del foro
Mensajes: 493
 
Fecha de registro: ene 2011
Mensajes: 493
Modelo de smartphone: Vernee Mars, Galaxy S3
Tu operador: Orange
Mencionado: 3 comentarios
Tagged: 0 hilos
Sonido aleatorio al pulsar boton

Alguien sabe como se puede hacer para que al pulsar un boton se reproduzca un sonido aleatorio desde la carpeta "raw" ?
Responder Con Cita


  #2  
Viejo 02/10/13, 20:31:14
Avatar de mocelet
mocelet mocelet no está en línea
Desarrollador
Mensajes: 2,203
 
Fecha de registro: may 2011
Localización: Madrid
Mensajes: 2,203
Tu operador: -
Mencionado: 17 comentarios
Tagged: 2 hilos
Hazte un array int[] con todos los R.raw.cosas que tengas como sonido y elige un índice del array al azar con la clase Random y el método nextInt.

Entiendo que ya sabes reproducir un fichero sabiendo su nombre de recurso
Responder Con Cita
Gracias de parte de:
  #3  
Viejo 03/10/13, 10:20:31
Avatar de kaiser75
kaiser75 kaiser75 no está en línea
Miembro del foro
Mensajes: 493
 
Fecha de registro: ene 2011
Mensajes: 493
Modelo de smartphone: Vernee Mars, Galaxy S3
Tu operador: Orange
Mencionado: 3 comentarios
Tagged: 0 hilos
Lo de reproducir sonido si , lo del array int[] y nextInt no, algun tutorial de ayuda?, gracias por tu respuesta mocelet
Responder Con Cita
  #4  
Viejo 03/10/13, 10:52:54
Avatar de mocelet
mocelet mocelet no está en línea
Desarrollador
Mensajes: 2,203
 
Fecha de registro: may 2011
Localización: Madrid
Mensajes: 2,203
Tu operador: -
Mencionado: 17 comentarios
Tagged: 2 hilos
Es algo básico de Java... sería algo así:

int[] sonidos = new int[]{R.raw.sonido1, R.raw.sonido2, R.raw.sonido3};
Random r = new Random();
int sonidoAlAzar = sonidos[r.nextInt(sonidos.length)];
Responder Con Cita
  #5  
Viejo 03/10/13, 12:59:53
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
También puedes acceder mediante reflexión a los sonidos, siempre y cuando se llamen como ha puesto de ejemplo mocelet

Random r = new Random();
int sonidoAlAzar = getResources().getIdentifier( "sonido"+r.nextInt(NUMERO_TOTAL_SONIDOS) , "raw" , this.class.getPackageName());
Responder Con Cita
  #6  
Viejo 03/10/13, 20:20:11
Avatar de kaiser75
kaiser75 kaiser75 no está en línea
Miembro del foro
Mensajes: 493
 
Fecha de registro: ene 2011
Mensajes: 493
Modelo de smartphone: Vernee Mars, Galaxy S3
Tu operador: Orange
Mencionado: 3 comentarios
Tagged: 0 hilos
Pues muchas gracias, voy a probar y ya os digo...
Responder Con Cita
  #7  
Viejo 04/10/13, 21:23:06
Avatar de kaiser75
kaiser75 kaiser75 no está en línea
Miembro del foro
Mensajes: 493
 
Fecha de registro: ene 2011
Mensajes: 493
Modelo de smartphone: Vernee Mars, Galaxy S3
Tu operador: Orange
Mencionado: 3 comentarios
Tagged: 0 hilos
He probado los codigos y no me van (igual me equivoco yo al poner los codigos), el de kriogeN me da error en "class"...

Random r = new Random();
int sonidoAlAzar = getResources().getIdentifier( "sonido"+r.nextInt(NUMERO_TOTAL_SONIDOS) , "raw" , this.class.getPackageName());

Me explico, este es el codigo que tengo para que suene el sonido 3.

public class Pagina2 extends Activity implements OnClickListener {

Button btnrandom; // id del boton a pulsar
SoundPool sp; // soundpool
// los Sonidos
int so1 = 0;
int so2 = 0;
int so3 = 0;
int so4 = 0;
}


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.pagina2);

// el boton para random
btnrandom = (Button) findViewById(R.id.btnrandom);
btnrandom.setOnClickListener(this);

// Cargar Sonidos
sp = new SoundPool(1, AudioManager.STREAM_MUSIC, 0);
so1 =sp.load(this, R.raw.sonido1, 1);
so2 =sp.load(this, R.raw.sonido2, 1);
so3 =sp.load(this, R.raw.sonido3, 1);
so4 =sp.load(this, R.raw.sonido4, 1);
}


@Override
public void onClick(View v) {
// TODO Auto-generated method stu
switch (v.getId()) {
case R.id.btnrandom:
sp.play(so3, 1, 1, 0, 0, 1);
}
}
Responder Con Cita
  #8  
Viejo 04/10/13, 23:06:33
Avatar de mocelet
mocelet mocelet no está en línea
Desarrollador
Mensajes: 2,203
 
Fecha de registro: may 2011
Localización: Madrid
Mensajes: 2,203
Tu operador: -
Mencionado: 17 comentarios
Tagged: 2 hilos
Empieza por conceptos básicos de programación como los arrays. Si no te vas a perder, antes de meterse con Android hay que tener nociones de Java.

En vez de tener int so1, so2, so3... crea un array int[] sonidos y al ir a reproducir le pasas el índice aleatorio.
Responder Con Cita
  #9  
Viejo 05/10/13, 09:56:17
Avatar de kaiser75
kaiser75 kaiser75 no está en línea
Miembro del foro
Mensajes: 493
 
Fecha de registro: ene 2011
Mensajes: 493
Modelo de smartphone: Vernee Mars, Galaxy S3
Tu operador: Orange
Mencionado: 3 comentarios
Tagged: 0 hilos
Gracias mocelet , lo de java estoy en ello, es complicado al principio pero no imposible
Responder Con Cita
  #10  
Viejo 19/10/13, 20:45:47
Avatar de kaiser75
kaiser75 kaiser75 no está en línea
Miembro del foro
Mensajes: 493
 
Fecha de registro: ene 2011
Mensajes: 493
Modelo de smartphone: Vernee Mars, Galaxy S3
Tu operador: Orange
Mencionado: 3 comentarios
Tagged: 0 hilos
He conseguido hacer el random con el boton, pero hay veces que me repite el mismo sonido 2 y 3 veces y luego cambia...a que es debido?
Responder Con Cita
  #11  
Viejo 19/10/13, 21:28:10
Avatar de mocelet
mocelet mocelet no está en línea
Desarrollador
Mensajes: 2,203
 
Fecha de registro: may 2011
Localización: Madrid
Mensajes: 2,203
Tu operador: -
Mencionado: 17 comentarios
Tagged: 2 hilos
Por la misma razón que en el juego del parchís puedes tirar el dado tres veces y salirte las tres veces el 6 Que sea un número aleatorio no te garantiza que sea distinto que el anterior.

Si quieres forzar que sea distinto tendrías que sacar un número al azar, ver si es el mismo de antes y sacar otro número aleatorio en su caso hasta que sea distinto.
Responder Con Cita
  #12  
Viejo 21/10/13, 12:09:19
Avatar de kaiser75
kaiser75 kaiser75 no está en línea
Miembro del foro
Mensajes: 493
 
Fecha de registro: ene 2011
Mensajes: 493
Modelo de smartphone: Vernee Mars, Galaxy S3
Tu operador: Orange
Mencionado: 3 comentarios
Tagged: 0 hilos
Cuantos mas sonidos añado menos se repiten, hice la prueba con unos 6 sonidos, pero al añadir 20 no se repiten tanto , lo que pasa es que si lo hago con soundpool va bien pero tarda en cargar y los sonidos mas largos se cortan al reproducirlos, entonces he probado a hacer el random con mediaplayer, que va perfecto solo que por ejemplo pulsas dos veces el boton y se reproducen dos sonidos a la vez, si pulsas 4 reproduce 4 i asi sucesivamente y es molesto, en cambio en la lista de sonidos que tengo si me funciona, pulso un boton y reproduce, si pulsas otro boton para el que se reproduce y suena el nuevo, en cambio con el boton random no, hay manera de parar el sonido que suena en el random?
Responder Con Cita
  #13  
Viejo 21/10/13, 12:43:34
Avatar de mocelet
mocelet mocelet no está en línea
Desarrollador
Mensajes: 2,203
 
Fecha de registro: may 2011
Localización: Madrid
Mensajes: 2,203
Tu operador: -
Mencionado: 17 comentarios
Tagged: 2 hilos
El MediaPlayer tiene un método stop() y el SoundPool también especificando el identificador del stream... así que si puedes reproducirlo puedes pararlo.
Responder Con Cita
  #14  
Viejo 21/10/13, 15:49:00
Avatar de kaiser75
kaiser75 kaiser75 no está en línea
Miembro del foro
Mensajes: 493
 
Fecha de registro: ene 2011
Mensajes: 493
Modelo de smartphone: Vernee Mars, Galaxy S3
Tu operador: Orange
Mencionado: 3 comentarios
Tagged: 0 hilos
Si, el metodo stop() me funciona en soundpool, pero en mediaplayer no, en mediaplayer solo me funciona con la lista de sonidos, unos 30 cada uno con su id de boton diferente.
Este es mi codigo, el cual me funciona perfecto, pero con un solo boton random no, no los detiene, seguire investigando haver :

@Override
public void onClick(View v) {
//click boton
switch (v.getId()) {

case R.id.btnrandom:
stopPlaying();
int sonidos = rnd.nextInt(sonidos.length);
final MediaPlayer mp = MediaPlayer.create(Pagina2.this, sonidos[sonidos] );
mp.start();
break;

default:
break;
}
}

// Liberar MediaPlayer y parar sonidos activos
private void stopPlaying() {
if (mp != null) {
mp.stop();
mp.release();
mp = null;
}
}
Responder Con Cita
Gracias de parte de:
  #15  
Viejo 21/10/13, 16:18:14
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
Esto es lo que tienes en el "onClick":

final MediaPlayer mp = MediaPlayer.create(Pagina2.this, sonidos[sonidos] );
mp.start();

Y esto en el "stopPlaying":

if (mp != null) {
mp.stop();
mp.release();
mp = null;
}

Y aunque en el fragmento que has puesto no se ve seguro que tienes una variable global llamada:

MediaPlayer mp;

¿De verdad tenemos que explicarte porque el sonido no se para cuando pulsas el stop? Como siempre digo, primero Java, después Android.

Aunque suene muy borde, son errores muy básicos que a poco que depures un poco te das cuenta.

Solución:

Quita el "final MediaPlayer" en la línea:

final MediaPlayer mp = MediaPlayer.create(Pagina2.this, sonidos[sonidos] );

Quedando así:

mp = MediaPlayer.create(Pagina2.this, sonidos[sonidos] );

NOTA: Aunque funcione bien, no queda muy legible tener un array llamado "sonidos" y que su posición también la llames "sonidos".
Responder Con Cita
Gracias de parte de:
  #16  
Viejo 21/10/13, 18:46:02
Avatar de kaiser75
kaiser75 kaiser75 no está en línea
Miembro del foro
Mensajes: 493
 
Fecha de registro: ene 2011
Mensajes: 493
Modelo de smartphone: Vernee Mars, Galaxy S3
Tu operador: Orange
Mencionado: 3 comentarios
Tagged: 0 hilos
Muchas Gracias kriogeN, efectivamente tengo la variable creada "MediaPlayer mp;" ahora si funciona, fallo mio en el "final MediaPlayer"...entendido para la proxima vez .
Responder Con Cita
Respuesta

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

Herramientas

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: 14:39:42 (GMT +2)

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