problema al reproducir sonido en java

LaTHaNDeR

Pues quiero reproducir un sonido .wav en java, y la verda me estoi volviendo loco Xd, este es mi codigo de prueba:

import java.io.File;

import javax.sound.sampled.AudioFileFormat;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.Clip;

public class ReproduceAudio extends Thread{

public static void main(String[] args) {
try {


        // Se obtiene un Clip de sonido
        Clip sonido = AudioSystem.getClip();
        
        // Se carga con un fichero wav
        sonido.open(AudioSystem.getAudioInputStream(new File("moonseed.wav")));
        
        // Comienza la reproducción
        sonido.start();
//      boolean repro=sonido.isRunning();
        // Espera mientras se esté reproduciendo.
        while (sonido.isRunning()){
          Thread.sleep(1000);

        }
         
        
        // Se cierra el clip.
        sonido.close();
    } 
    catch (Exception e) {
        System.out.println("" + e);
    }
}

}

bien pues lo mas raro esque aveces me funciona y otras no (mayormente no funciona XD) es rarisimo, y bueno aver si por aqui hay alguien que me pueda indicar que le falta o como solucionarlo.

B

Cuando lo ejecutas, se ejecuta solo una copia?

Es decir, te aseguras que se termina bien el programa antes de arrancarlo otra vez?

Poco te puedo ayudar xD, no conozco esa javax. Has trasteado mas con ella? que mas posibilidades tiene?

Has probado a ejecutarlo en depuracion? Te tira el compilador algun warning del "Clip" ?

Que IDE utilizas? Prueba a arrancarlo a pelo en consola xD

Josepanaero

Te voy a pegar por aquí una clase Sonido que hice hace ya un par de años programando un come cocos en java xD Hay cosas que no te servirán de nada, seguramente también tendrá cosas que se puedan hacer mejor, pero esto que te pego aquí funcionaba bien:

package data;
import java.util.ArrayList;
import javax.sound.sampled.*;
import java.io.*;

/**
 *
 * @author José María G. Q.
 */
public class Sonido {
    private Clip inicioJuego;
    private Clip quesitoPequeno;
    private Clip quesitoGrande;
    private Clip muerto;
    private Clip comeFantasma;
    
/** Creates a new instance of Sonido */ public Sonido() { // Conjunto de direcciones en las que se encuentran los sonidos ArrayList<String> pathSonido = new ArrayList<String>();
File sf; AudioFileFormat aff; AudioInputStream ais; // Añadimos las rutas de todos los ficheros de sonido pathSonido.add("sonidos/inicioJuego.wav"); pathSonido.add("sonidos/quesitoPequeno.wav"); pathSonido.add("sonidos/quesitoGrande.wav"); pathSonido.add("sonidos/muerto.wav"); pathSonido.add("sonidos/comeFantasma.wav"); for(int i=0; i<pathSonido.size(); i++){ // Obtenemos el fichero de sonido sf = new File(pathSonido.get(i)); try{ aff=AudioSystem.getAudioFileFormat(sf); ais=AudioSystem.getAudioInputStream(sf); AudioFormat af=aff.getFormat(); // Creamos un objeto que implementa la interfaz Clip DataLine.Info info = new DataLine.Info( Clip.class, ais.getFormat(), ((int) ais.getFrameLength() * af.getFrameSize())); // Abrimos una línea para posteriormente poder reproducir el sonido if(i == 0){ inicioJuego = (Clip) AudioSystem.getLine(info); inicioJuego.open(ais); } else if(i == 1){ quesitoPequeno = (Clip) AudioSystem.getLine(info); quesitoPequeno.open(ais); } else if(i == 2){ quesitoGrande = (Clip) AudioSystem.getLine(info); quesitoGrande.open(ais); } else if(i == 3){ muerto = (Clip) AudioSystem.getLine(info); muerto.open(ais); } else if(i == 4){ comeFantasma = (Clip) AudioSystem.getLine(info); comeFantasma.open(ais); } } catch(UnsupportedAudioFileException ee){} catch(IOException ea){} catch(LineUnavailableException LUE){}; } }
public void playInicioJuego(){ if(!inicioJuego.isRunning()) inicioJuego.setMicrosecondPosition(0); inicioJuego.loop(0); } public void playQuesitoPequeno(){ if(!quesitoPequeno.isRunning()) quesitoPequeno.setMicrosecondPosition(0); quesitoPequeno.loop(0); } public void playQuesitoGrande(){ if(!quesitoGrande.isRunning()) quesitoGrande.setMicrosecondPosition(0); quesitoGrande.loop(0); } public void playMuerto(){ if(!muerto.isRunning()) muerto.setMicrosecondPosition(0); muerto.loop(0); } public void playComeFantasma(){ if(!comeFantasma.isRunning()) comeFantasma.setMicrosecondPosition(0); comeFantasma.loop(0); } public long getMilisegundosInicioJuego(){ return inicioJuego.getMicrosecondLength() / 1000; } public long getMilisegundosMuerto(){ return muerto.getMicrosecondLength() / 1000; } public boolean isInicioJuegoRunning(){ return inicioJuego.isRunning(); } }
B

#3

Muchisimas gracias colega! xD

Josepanaero

#4 de nada :D A ver si os sirve de algo. En su día yo tb estuve peleándome con el sonido en java, y fue bastante engorroso hasta que conseguí echarlo a andar.

Salu2!

Usuarios habituales