|
||
|
![]() |
![]() |
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
|
||||
|
||||
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" ?
|
|
#2
|
||||
|
||||
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
__________________
El mejor Cuatro en Raya de Android (Hilo en HTCMania, Play Store) ¡Un millón de descargas!
|
Gracias de parte de: | ||
#3
|
||||
|
||||
Lo de reproducir sonido si , lo del array int[] y nextInt no, algun tutorial de ayuda?, gracias por tu respuesta mocelet
![]() |
#4
|
||||
|
||||
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)];
__________________
El mejor Cuatro en Raya de Android (Hilo en HTCMania, Play Store) ¡Un millón de descargas!
|
#5
|
||||
|
||||
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()); |
#6
|
||||
|
||||
Pues muchas gracias, voy a probar y ya os digo...
![]() |
#7
|
||||
|
||||
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); } } |
#8
|
||||
|
||||
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.
__________________
El mejor Cuatro en Raya de Android (Hilo en HTCMania, Play Store) ¡Un millón de descargas!
|
#9
|
||||
|
||||
Gracias mocelet
![]() |
#10
|
||||
|
||||
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?
|
#11
|
||||
|
||||
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
![]() 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.
__________________
El mejor Cuatro en Raya de Android (Hilo en HTCMania, Play Store) ¡Un millón de descargas!
|
#12
|
||||
|
||||
Cuantos mas sonidos añado menos se repiten, hice la prueba con unos 6 sonidos, pero al añadir 20 no se repiten tanto
![]() |
#13
|
||||
|
||||
El MediaPlayer tiene un método stop() y el SoundPool también especificando el identificador del stream... así que si puedes reproducirlo puedes pararlo.
__________________
El mejor Cuatro en Raya de Android (Hilo en HTCMania, Play Store) ¡Un millón de descargas!
|
#14
|
||||
|
||||
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; } } |
Gracias de parte de: | ||
#15
|
||||
|
||||
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". |
Gracias de parte de: | ||
#16
|
||||
|
||||
Muchas Gracias kriogeN, efectivamente tengo la variable creada "MediaPlayer mp;" ahora si funciona, fallo mio en el "final MediaPlayer"...entendido para la proxima vez
![]() |
![]() |
![]() |
||||||
|