Mehrere Sounds

MaxgQ

Mitglied
Hallo ich möchte, dass ein bestimmte Sound bei einem Zug des Spielers erklingt, und ein bestimmter Sound für den Zug des Computers. Ich habe nun für beide eine separate Methode geschrieben. playerSound und computerSound. Diese beiden Methoden sind aber ziemlich lang. Gibt es eine Möglichkeit, wie ich diese Methoden um ein einiges verkleinern kann.

public class Sound {
public static int playerSound (char[][] gameBoard) {
try (AudioInputStream inStream = AudioSystem.getAudioInputStream(Sound.class.getResourceAsStream("Spieler x.wav")) ){
Clip clip = AudioSystem.getClip();
clip.open(inStream);
clip.start();
} catch (LineUnavailableException lue) {
System.out.println("Spieler x.wav" + lue.getMessage());
lue.printStackTrace();
} catch (UnsupportedAudioFileException uafe) {
System.out.println("Spieler x.wav" + uafe.getMessage());
uafe.printStackTrace();
} catch (IOException ioe) {
System.out.println("Spieler x.wav" + ioe.getMessage());
ioe.printStackTrace();
}

try {
Thread.sleep(1000);
} catch (InterruptedException ex) {}
return 0;
}

public static int computerSound (char[][] gameBoard) {
try (AudioInputStream inStream = AudioSystem.getAudioInputStream(Sound.class.getResourceAsStream("Bot.wav")) ){
Clip clip = AudioSystem.getClip();
clip.open(inStream);
clip.start();
} catch (LineUnavailableException lue) {
System.out.println("Bot.wav" + lue.getMessage());
lue.printStackTrace();
} catch (UnsupportedAudioFileException uafe) {
System.out.println("Bot.wav" + uafe.getMessage());
uafe.printStackTrace();
} catch (IOException ioe) {
System.out.println("Bot.wav" + ioe.getMessage());
ioe.printStackTrace();
}

try {
Thread.sleep(1000);
} catch (InterruptedException ex) {}
return 0;
}
 
Erster Schritt wäre mal etwas in der Richtung:
Java:
public static int playerSound (char[][] gameBoard) {
    play("Spielerx.wav");
}

public static int computerSound (char[][] gameBoard) {
    play("Bot.wav");
}

private void play(String resourceName) {
       try (AudioInputStream inStream = AudioSystem.getAudioInputStream(Sound.class.getResourceAsStream(resouceName)) ){
           Clip clip = AudioSystem.getClip();
           clip.open(inStream);
           clip.start();
       } catch (LineUnavailableException | UnsupportedAudioFileException | IOException ex) {
           System.out.println(resourceName + " " + ex.getMessage());
           ex.printStackTrace();
       }

       try {
           Thread.sleep(1000);
       } catch (InterruptedException ex) {}
       return 0;
}
 
Erster Schritt wäre mal etwas in der Richtung:
Java:
public static int playerSound (char[][] gameBoard) {
    play("Spielerx.wav");
}

public static int computerSound (char[][] gameBoard) {
    play("Bot.wav");
}

private void play(String resourceName) {
       try (AudioInputStream inStream = AudioSystem.getAudioInputStream(Sound.class.getResourceAsStream(resouceName)) ){
           Clip clip = AudioSystem.getClip();
           clip.open(inStream);
           clip.start();
       } catch (LineUnavailableException | UnsupportedAudioFileException | IOException ex) {
           System.out.println(resourceName + " " + ex.getMessage());
           ex.printStackTrace();
       }

       try {
           Thread.sleep(1000);
       } catch (InterruptedException ex) {}
       return 0;
}
Wie würde es weiter gehen?
 
Erstmal die Fehler beheben, die ich eingebaut habe 🙂

Und dann könnte man auch darüber nachdenken, den Spaß in eine Klasse auszulagern. Dann könnte man einen Listener verwenden, damit man nicht pauschal eine bestimmte Zeit warten muss, sondern der Clip halt einfach bis zum Ende gespielt wird.

Das wären ein paar Dinge, die mir spontan einfallen würden. Bin aber nicht im Sound-Thema drin.
 

Zurück
Oben