http://nalab.mind.meiji.ac.jp/~mk/program/sound/PlayWave.java
『JavaでHelloWorldサウンド編』 にサンプル・プログラムがある。 それを参考にして作ったプログラム。
1 /*
2 * PlayWave.java --- WAVEファイルの音を再生する
3 */
4
5 import java.io.IOException;
6 import java.io.File;
7 import javax.sound.sampled.*;
8
9 public class PlayWave {
10 public static void main(String [] args) {
11 try {
12 AudioInputStream ais =
13 AudioSystem.getAudioInputStream(new File(args[0]));
14 // オーディオ入力ストリームからデータを読む
15 byte [] data = new byte [ais.available()];
16 ais.read(data);
17 ais.close();
18 // ファイルのフォーマットを調べる
19 AudioFormat af = ais.getFormat();
20 // 再生する
21 DataLine.Info info = new DataLine.Info(SourceDataLine.class, af);
22 SourceDataLine line = (SourceDataLine)AudioSystem.getLine(info);
23 line.open(af);
24 line.start();
25 line.write(data, 0, data.length);
26 } catch (Exception e) {
27 e.printStackTrace();
28 System.exit(1);
29 }
30 }
31 }
もしかして、line.drain(); と line.close(); も必要かな。
| コンパイル&実行 |
knoppix$ javac PlayWave.java knoppix$ java PlayWave piano.wav |
なお、Clip として再生する方法もある。見比べると良い。
1 /*
2 * PlayWave_another.java --- Clip を使って再生する (参考)
3 * データの中身が見えないので卒研的にはあまり意味がないけれど…
4 */
5
6 import java.io.*;
7 import javax.sound.sampled.*;
8
9 public class PlayWave_another {
10 public static void main(String [] args) throws Exception {
11 AudioInputStream ais =
12 AudioSystem.getAudioInputStream(new File(args[0]));
13 Clip clip = (Clip)AudioSystem.getLine(new Line.Info(Clip.class));
14 try {
15 clip.open(ais);
16 clip.loop(0); // 0+1 回再生…それなら clip.start() でもよい
17 while (clip.isRunning()) {
18 Thread.sleep(100);
19 }
20 }
21 finally {
22 clip.close();
23 System.exit(0); // 意外にも必要
24 }
25 }
26 }