Mit javax.sound.beprobt.Clip play, loop und stop mehrere sounds in einem Spiel. Unerwartete Fehler
Ich versuche zu spielen, zwei wav-sounds auf einmal während eines Spiels (Hintergrund-Musik und einen Effekt). Ich zuerst konstruiert dieses Stück code mit einem anderen audio-handler in java, die behandeln würden, die das Abspielen, stoppen, Loopen des sounds. Dieses Konstrukt würde spielen die Musik im hintergrund oder der Effekt aber nur eine zu einem Zeitpunkt. Ich schaute mich um das internet und mir wurde gesagt, verwenden javax.sound.beprobt.Clip Griff die Töne so wiederverwendet das gleiche Konstrukt(play, stop, loop), wechselte aber es zu verwenden, javax.sound.beprobt.Clip. Jetzt bin ich völlig verloren. Von dem, was ich bisher gelesen haben ich habe alles richtig gemacht und bekomme keine Fehler in den eclipse-editor, aber wenn ich es laufen lasse, bekomme ich zwei Fehler. In eclipse (unter Linux) eine LineUnavailableException geworfen wird. In eclipse (unter windows 7) bekomme ich eine java.lang.NullPointerException in der loop () - Abschnitt dieses Codes. Wenn Sie mir zeigen könnte, was ich falsch mache oder zeigen Sie mich auf einige der relevanten Unterlagen, die ich würde schätzen es. Ich gehe davon aus, dass Ihr etwas mit meinem code, behandelt Ausnahmen, aber ich bin mir nicht sicher. Wenn Sie irgendwelche anderen hässlichen code Fehltritte bitte lassen Sie mich wissen, ich bin bemüht das die besten Programmierer, ich kann und wirklich dankbar für Konstruktive Kritik. Vielen Dank für Ihre Zeit.
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();
}
}
InformationsquelleAutor T. Thomas | 2012-08-12
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich war in der Lage, den code zu arbeiten und haben jetzt ein besseres Verständnis von Clips. Die Seite, die mir geholfen, die war http://www3.ntu.edu.sg/home/ehchua/programming/java/J8c_PlayingSound.html es bricht alles ab und half mir, wo ich Fehler gemacht habe. Hier ist meine Letzte funktionierende code. Wie vor wenn Sie einen schrecklichen Fehler oder über Sehenswürdigkeiten in der Logik oder Stil lassen Sie es mich wissen.
InformationsquelleAutor T. Thomas
Fand ich eine nützliche Technik, um den sound stoppen. Sie können kopieren Sie diese zwei Klassen runter und testen Sie es selbst. Dennoch, der clip.stop () - Methode ist eher ein pause-Methode. Es Stoppt den sound aus spielen, ja, aber es nicht klar den Ton von der Linie. Als ein Ergebnis, das Geräusch ist immer noch in der Warteschlange zu spielen und keine neuen sound wiedergegeben werden kann. Also mit dem clip.close () - Methode wird klar, dass sich diese Daten in der Warteschlange und es ermöglichen, einen neuen sound, gespielt zu werden, oder eine andere Aktion stattfinden. Beachten Sie auch in den folgenden code eine sound-Datei in den Projekt-Ordner namens "predator".wav" dieser sound kann jede Art von sound, den Sie verwenden möchten, anstatt den sound, den ich wählte, aber sicher sein, es ist eine .wav-format und der sound muss sich in der obersten Ebene des Projektordners.
InformationsquelleAutor Andrew Peturis