如何最小化多个音频代码
How to minimalize multiple Audio Codes
我正在尝试最小化我的多个音频代码。这看起来太糟糕了。我怎样才能将这么多代码最小化为一个清晰易读的代码。
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();
}
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();
}
return 0;
}
首先,结合你的例外情况:
try (AudioInputStream inStream = AudioSystem.getAudioInputStream(Sound.class.getResourceAsStream("Spieler x.wav")) ){
Clip clip = AudioSystem.getClip();
clip.open(inStream);
clip.start();
} catch (LineUnavailableException | UnsupportedAudioFileException | IOException e) {
System.out.println("Spieler x.wav " + e);
e.printStackTrace();
}
其次,将两种方法中相同的代码移动到单独的 private
方法中:
private static void play(String resourcePath) {
try (AudioInputStream inStream = AudioSystem.getAudioInputStream(Sound.class.getResourceAsStream(resourcePath)) ){
Clip clip = AudioSystem.getClip();
clip.open(inStream);
clip.start();
} catch (LineUnavailableException | UnsupportedAudioFileException | IOException e) {
System.out.println(resourcePath + ": " + e);
e.printStackTrace();
}
}
public static int playerSound(char[][] gameBoard) {
play("Spieler x.wav");
return 0;
}
public static int computerSound(char[][] gameBoard) {
play("Bot.wav");
return 0;
}
第三,因为你总是 return 相同的值(零),所以 return 值根本没有意义:
public static void playerSound(char[][] gameBoard) {
play("Spieler x.wav");
}
public static void computerSound(char[][] gameBoard) {
play("Bot.wav");
}
您从不使用 gameBoard
,因此可以从方法中删除该参数:
public static void playerSound() {
play("Spieler x.wav");
}
public static void computerSound() {
play("Bot.wav");
}
附带说明一下,您可能不应该在 Clip 播放完毕之前自动关闭 AudioInputStream,因为 Clip 可能仍在读取它:
private static void play(String resourcePath) {
try {
AudioInputStream inStream = AudioSystem.getAudioInputStream(
Sound.class.getResourceAsStream(resourcePath));
Clip clip = AudioSystem.getClip();
clip.addLineListener(e -> {
if (e.getType().equals(LineEvent.Type.STOP)) {
clip.close();
try {
inStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
});
clip.open(inStream);
clip.start();
} catch (LineUnavailableException | UnsupportedAudioFileException | IOException e) {
System.out.println(resourcePath + ": " + e);
e.printStackTrace();
}
}
我正在尝试最小化我的多个音频代码。这看起来太糟糕了。我怎样才能将这么多代码最小化为一个清晰易读的代码。
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();
}
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();
}
return 0;
}
首先,结合你的例外情况:
try (AudioInputStream inStream = AudioSystem.getAudioInputStream(Sound.class.getResourceAsStream("Spieler x.wav")) ){
Clip clip = AudioSystem.getClip();
clip.open(inStream);
clip.start();
} catch (LineUnavailableException | UnsupportedAudioFileException | IOException e) {
System.out.println("Spieler x.wav " + e);
e.printStackTrace();
}
其次,将两种方法中相同的代码移动到单独的 private
方法中:
private static void play(String resourcePath) {
try (AudioInputStream inStream = AudioSystem.getAudioInputStream(Sound.class.getResourceAsStream(resourcePath)) ){
Clip clip = AudioSystem.getClip();
clip.open(inStream);
clip.start();
} catch (LineUnavailableException | UnsupportedAudioFileException | IOException e) {
System.out.println(resourcePath + ": " + e);
e.printStackTrace();
}
}
public static int playerSound(char[][] gameBoard) {
play("Spieler x.wav");
return 0;
}
public static int computerSound(char[][] gameBoard) {
play("Bot.wav");
return 0;
}
第三,因为你总是 return 相同的值(零),所以 return 值根本没有意义:
public static void playerSound(char[][] gameBoard) {
play("Spieler x.wav");
}
public static void computerSound(char[][] gameBoard) {
play("Bot.wav");
}
您从不使用 gameBoard
,因此可以从方法中删除该参数:
public static void playerSound() {
play("Spieler x.wav");
}
public static void computerSound() {
play("Bot.wav");
}
附带说明一下,您可能不应该在 Clip 播放完毕之前自动关闭 AudioInputStream,因为 Clip 可能仍在读取它:
private static void play(String resourcePath) {
try {
AudioInputStream inStream = AudioSystem.getAudioInputStream(
Sound.class.getResourceAsStream(resourcePath));
Clip clip = AudioSystem.getClip();
clip.addLineListener(e -> {
if (e.getType().equals(LineEvent.Type.STOP)) {
clip.close();
try {
inStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
});
clip.open(inStream);
clip.start();
} catch (LineUnavailableException | UnsupportedAudioFileException | IOException e) {
System.out.println(resourcePath + ": " + e);
e.printStackTrace();
}
}