TicTacToe Sound nach jedem Zug

MaxgQ

Mitglied
Hallo Zusammen. Ich habe ein TicTacToe Spiel auf Intellij Idea geschrieben. Ich möchte, dass nach jedem gespielten Zug vom Spieler und Computer ein Sound erscheint. Ich habe vorher noch nie eine Sound Datei in ein Programm hinzugefügt, und im Internet bin ich auf keinen guten Beitrag gestossen, welcher mir weiter helfen kann.

Das ist jetzt z.B. ein Code Ausschnit vom Computer. Er soll nun nach jedem Zug welche er ausgibt einen Sound Abspielen.

public class ComputerPlayer {
private static char[][] gameBoard;
public int computerMove(char[][] gameBoard) {

Random rand = new Random();
try {
TimeUnit.SECONDS.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}

int move = rand.nextInt(9) + 1;

boolean result = Game.validMove(move, gameBoard);

while (!result) {
move = rand.nextInt(9) + 1;
result = Game.validMove(move, gameBoard);
}

System.out.println("Computer Zug " + move);
return move;
}
}
 
Du kannst die Klasse AudioSystem nutzen um Töne abzuspielen.

Kurz umschrieben:
- Du holst dir vom AudioSystem ein Clip.
- Du erzeugst ein AudioInputStream auf der Datei mit dem Sound
- mit clip.open übergibst du den AudioInputStream
- mit clip.start spielst Du den Ton ab.
 
Für einfache kurze Sounds wird wav oft und gerne benutzt und wav Dateien haben den Vorteil, dass die eigentlich von allen Systemen gelesen werden können. Ansonsten kann man das AudioSystem auch befragen, was für Formate unterstützt werden.
 
Könnten Sie mir ein Beispiel zeigen, wie eine Methode aussehen könnte. Wäre von Vorteil, wenn es sich auf mein Thema beziehen würde.
 
Ein ganz kleines Beispiel:
[CODE lang="java" highlight="6-9"]import javax.sound.sampled.*;
import java.io.IOException;

public class Test {
public static void main(String[] args) {
try (AudioInputStream inStream = AudioSystem.getAudioInputStream(Test.class.getResourceAsStream("/test.wav")) ){
Clip clip = AudioSystem.getClip();
clip.open(inStream);
clip.start();
} catch (LineUnavailableException lue) {
System.out.println("Line unavailable: " + lue.getMessage());
lue.printStackTrace();
} catch (UnsupportedAudioFileException uafe) {
System.out.println("Unsupported Audio File: " + uafe.getMessage());
uafe.printStackTrace();
} catch (IOException ioe) {
System.out.println("IO Exception: " + ioe.getMessage());
ioe.printStackTrace();
}

try {
Thread.sleep(10000);
} catch (InterruptedException ex) {}
}
}
[/CODE]

Die wichtigen Zeilen sind nur die 4 Zeilen, die markiert sind: AudioInputStream holen, Clip holen, Clip öffnet den Stream, clip startet.

Dann halt die Behandlung der möglichen Exceptions ... Und damit das Programm sich nicht sofort beendet: Noch ein Sleep damit ich mein wav file hören kann...

Das test.wav liegt im Ordner für die Ressourcen. So Du ein normales IntelliJ Java Projekt hast, dann hast Du vermutlich nur den Ordner src in dem auch Dein Code liegt: Da gehört dann auch die Datei rein.
Bei Maven/Gradle läge der code in src/main/java und die Datei müsste nach src/main/resources
 
Ein ganz kleines Beispiel:
[CODE lang="java" highlight="6-9"]import javax.sound.sampled.*;
import java.io.IOException;

public class Test {
public static void main(String[] args) {
try (AudioInputStream inStream = AudioSystem.getAudioInputStream(Test.class.getResourceAsStream("/test.wav")) ){
Clip clip = AudioSystem.getClip();
clip.open(inStream);
clip.start();
} catch (LineUnavailableException lue) {
System.out.println("Line unavailable: " + lue.getMessage());
lue.printStackTrace();
} catch (UnsupportedAudioFileException uafe) {
System.out.println("Unsupported Audio File: " + uafe.getMessage());
uafe.printStackTrace();
} catch (IOException ioe) {
System.out.println("IO Exception: " + ioe.getMessage());
ioe.printStackTrace();
}

try {
Thread.sleep(10000);
} catch (InterruptedException ex) {}
}
}
[/CODE]

Die wichtigen Zeilen sind nur die 4 Zeilen, die markiert sind: AudioInputStream holen, Clip holen, Clip öffnet den Stream, clip startet.

Dann halt die Behandlung der möglichen Exceptions ... Und damit das Programm sich nicht sofort beendet: Noch ein Sleep damit ich mein wav file hören kann...

Das test.wav liegt im Ordner für die Ressourcen. So Du ein normales IntelliJ Java Projekt hast, dann hast Du vermutlich nur den Ordner src in dem auch Dein Code liegt: Da gehört dann auch die Datei rein.
Bei Maven/Gradle läge der code in src/main/java und die Datei müsste nach src/main/resources
Wie füge ich also die Wav Datein in mein Projekt ordner in Intellij? Muss ich einfach die Datei aus dem Ordner nehmen und in den Ornder Src ziehen...
 
Ja genau, einfach die Datei in den Ordner src ziehen.

Wichtig ist dann, dass Du genau auf die Gross-/Kleinschreibung achtest und dass Du den führenden / nicht wegnimmst.
 
Und natürlich weicht der Code auch von dem ab, den ich gezeigt habe.
- Dir fehlt der Import von der Klasse File.
- Damit die Datei gefunden wird, musst Du in dem richtigen Verzeichnis sein. So ein Ton wäre aber eine Ressource, daher sollte die auch als solche hinzugefügt und dann als solche geladen werden!
- LineUnavailableException wird auch nicht behandelt
 
Meine letzte Frage wäre nun...
Wenn Ihr meine erste Nachricht von diesem Thema anschaut. Wie kann nun ein Sound Abgespielt werden, nach einer Ausführung. Also meine Ausführung ist, sobald ich ein Kreuz auf mein Spielfeld gesetzt habe, dann sollte der Sound abgespielt werden.
 
Du führst halt einfach an der gewünschten Stelle den gezeigten Code aus (den Du natürlich in eine separate Klasse/Methode auslagerst).
 

Zurück
Oben