import java.io.IOException; import java.io.File; import javax.sound.sampled.*; public class HelloWorldRecorder extends Thread { private TargetDataLine m_line; private AudioFileFormat.Type m_targetType; private AudioInputStream m_audioInputStream; private File m_outputFile; private boolean m_bRecording; /** * コンストラクタ **/ public HelloWorldRecorder(TargetDataLine line,AudioFileFormat.Type targetType,File file) { m_line = line; m_audioInputStream = new AudioInputStream(line); m_targetType = targetType; m_outputFile = file; } /** * 録音を開始します */ public void startRecording() { m_line.start(); super.start(); } /** * 録音を停止します */ public void stopRecording() { m_line.stop(); m_line.close(); m_bRecording = false; } public void run() { try { AudioSystem.write(m_audioInputStream,m_targetType,m_outputFile); System.out.println("録音が終了しました"); } catch (IOException e) { e.printStackTrace(); } } public static void main(String[] args) { try { // Fileクラスのインスタンスを生成 File outputFile = new File("hello.wav"); // 44.1 kHz, 16 bit, ステレオの設定でオーディオ形式を生成します AudioFormat audioFormat = new AudioFormat(AudioFormat.Encoding.PCM_SIGNED, 44100.0F, 16, 2, 4, 44100.0F, false); // データラインの情報オブジェクトを生成します DataLine.Info info = new DataLine.Info(TargetDataLine.class, audioFormat); // 指定されたデータライン情報に一致するラインを取得します TargetDataLine targetDataLine = (TargetDataLine) AudioSystem.getLine(info); // 指定されたオーディオ形式でラインを開きます targetDataLine.open(audioFormat); // 書き込むオーディオファイルの種類を設定します AudioFileFormat.Type targetType = AudioFileFormat.Type.WAVE; // 録音するインスタンスを生成 HelloWorldRecorder recorder = new HelloWorldRecorder(targetDataLine,targetType,outputFile); System.out.println("ENTERキーを押すと録音を開始します"); byte[] b = new byte[2]; System.in.read(b); // 録音を開始します recorder.startRecording(); System.out.println("録音中..."); System.out.println("ENTERキーを押すと録音を停止します"); System.in.read(b); recorder.stopRecording(); System.out.println("録音を停止しました"); System.exit(0); } catch (Exception e) { e.printStackTrace(); System.exit(1); } } }