Estoy tratando de reproducir dos sonidos wav a la vez durante un juego (Música de fondo y un efecto). Primero construí este fragmento de código usando otro controlador de audio en Java que manejaría la reproducción, la detención y el bucle del sonido. Este constructo reproduciría la música de fondo o el efecto, pero solo uno a la vez. Miré a través de Internet y me dijeron que usara javax.sound.sampled.Clip para manejar los sonidos, así que reutilicé el mismo constructo (play, stop, loop) pero lo cambié para usar javax.sound.sampled.Clip. Ahora estoy completamente perdido. Por lo que he leído hasta ahora, he hecho todo lo correcto y no he recibido errores en el editor de eclipse, pero cuando lo ejecuto obtengo uno de dos errores. En eclipse (ejecutándose en Linux) se lanza una excepción LineUnavailableException. En eclipse (se ejecuta en Windows 7) obtengo una java.lang.NullPointerException en la sección loop() de este código. Si pudiera mostrarme lo que estoy haciendo mal o señalarme alguna documentación relevante, lo agradecería. Asumo que es algo con mi código que maneja Excepciones, pero no estoy seguro. Si ve algún otro error en el código, por favor dígame que me esfuerzo por ser el mejor programador que pueda y realmente aprecio la crítica constructiva. Gracias por tu tiempo.Usando javax.sound.sampled.Clip para reproducir, repetir y detener sonidos múltiples en un juego. Errores inesperados
import java.io.File;
import java.io.IOException;
import java.net.MalformedURLException;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.Clip;
import javax.sound.sampled.LineUnavailableException;
import javax.sound.sampled.UnsupportedAudioFileException;
/**
* Handles play, pause, and looping of sounds for the game.
* @author Tyler Thomas
*
*/
public class Sound {
private Clip myClip;
public Sound(String fileName) {
try {
File file = new File(fileName);
if (file.exists()) {
Clip myClip = AudioSystem.getClip();
AudioInputStream ais = AudioSystem.getAudioInputStream(file.toURI().toURL());
myClip.open(ais);
}
else {
throw new RuntimeException("Sound: file not found: " + fileName);
}
}
catch (MalformedURLException e) {
throw new RuntimeException("Sound: Malformed URL: " + e);
}
catch (UnsupportedAudioFileException e) {
throw new RuntimeException("Sound: Unsupported Audio File: " + e);
}
catch (IOException e) {
throw new RuntimeException("Sound: Input/Output Error: " + e);
}
catch (LineUnavailableException e) {
throw new RuntimeException("Sound: Line Unavailable: " + e);
}
}
public void play(){
myClip.setFramePosition(0); // Must always rewind!
myClip.loop(0);
myClip.start();
}
public void loop(){
myClip.loop(Clip.LOOP_CONTINUOUSLY);
}
public void stop(){
myClip.stop();
}
}