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 }