Sto provando a suonare due suoni wav contemporaneamente durante una partita (musica di sottofondo e un effetto). Per prima cosa ho costruito questo pezzo di codice usando un altro gestore audio in java che gestiva la riproduzione, l'arresto e il looping del suono. Questo costrutto riprodurrebbe la musica di sottofondo o l'effetto, ma solo uno alla volta. Ho guardato in Internet e mi è stato detto di usare javax.sound.sampled.Clip per gestire i suoni in modo tale che riutilizzassero lo stesso costrutto (play, stop, loop) ma lo ho cambiato per usare javax.sound.sampled.Clip. Ora sono completamente perso. Da quanto ho letto finora ho fatto tutto correttamente e non ho riscontrato errori nell'editor di eclipse, ma quando lo eseguo ho uno o due errori. In eclipse (in esecuzione su Linux) viene generata un'eccezione LineUnavailableException. In eclipse (in esecuzione su Windows 7) ottengo una java.lang.NullPointerException nella sezione loop() di questo codice. Se tu potessi mostrarmi cosa sto facendo male o indicarmi qualche documentazione pertinente, lo apprezzerei. Sto assumendo il suo qualcosa con il mio codice che gestisce le eccezioni ma non ne sono sicuro. Se vedi qualche altro codice orribile, per favore fammi sapere che mi sto impegnando per diventare il miglior programmatore che posso e apprezzo davvero le critiche costruttive. Grazie per il tuo tempo.Uso di javax.sound.sampled.Clip per riprodurre, eseguire il loop e interrompere i suoni multipli in un gioco. Errori imprevisti
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();
}
}