javaのサウンドAPIを用いて,マイクからの入力をそのまま再生する簡単なテストプログラムを作成しました.
// // オーディオの入力,出力のテストプログラム // // (無保証です.トラブル等あっても責任は取りません.) // // import javax.sound.sampled.*; import java.io.IOException; public class my_echo_test extends Thread { private static final int BUFFER_SIZE = 3200; // private static final int DM_BUFFER_SIZE = 500; // 実験用ダミー public my_echo_test(){ } public static void main(String[] args) { my_echo_test m = new my_echo_test(); m.init(); } public void init(){ // // 実験用ダミー // byte[] dm = new byte[DM_BUFFER_SIZE]; // // for(int i=0;i < DM_BUFFER_SIZE-1;i++){ // dm[0] = 0; // // 無音データは0じゃない?みたい // } // boolean flag = false; // true で実験, 今は無効 byte[] au_data = new byte[BUFFER_SIZE]; try { // 22 kHz, 16 bit, ステレオでオーディオ形式を生成 AudioFormat audioFormat = new AudioFormat(AudioFormat.Encoding.PCM_SIGNED,22050.0F,16,2,4,22050.0F,false); // 読み出し情報を生成 DataLine.Info targetInfo = new DataLine.Info(TargetDataLine.class, audioFormat); // 読み込みライン(ターゲットライン)を生成 TargetDataLine targetDataLine = (TargetDataLine)AudioSystem.getLine(targetInfo); // ラインを開く targetDataLine.open(audioFormat); // 書き込み情報を生成 DataLine.Info sourceInfo = new DataLine.Info(SourceDataLine.class,audioFormat); // 書き出しライン(ソースライン)を生成 SourceDataLine sourceDataline = (SourceDataLine)AudioSystem.getLine(sourceInfo); // ラインを開く sourceDataline.open(audioFormat); System.out.println("録音->再生 開始"); sourceDataline.start(); targetDataLine.start(); for(;;){ // // 実験用ダミー(今は無効) // if(flag){ // sourceDataline.write(dm, 0, dm.length); // // flag=false; // 一度だけダミーを挟むとき // } sourceDataline.write(au_data, 0, targetDataLine.read(au_data, 0, au_data.length)); } }catch (Exception e) { System.out.println("error:"+e); } } } |
java サウンド編 Java サウンドAPI を参考にしました.