2011-09-14 5 views
3

以下は、オーディオデータを2 audio input streamsからバイト配列に読み込むコードです。2バイト配列を連結してからオーディオストリームに変換する

import javax.sound.sampled.*; 
import java.io.*; 

class tester { 
public static void main(String args[]) throws IOException { 
try { 
    Clip clip_1 = AudioSystem.getClip(); 
    AudioInputStream ais_1 = AudioSystem.getAudioInputStream(new File("D:\\UnderTest\\wavtester_1.wav")); 
    clip_1.open(ais_1); 

    Clip clip_2 = AudioSystem.getClip(); 
    AudioInputStream ais_2 = AudioSystem.getAudioInputStream(new File("D:\\UnderTest\\wavtester_2.wav")); 
    clip_2.open(ais_2); 

    byte arr_1[] = new byte[ais_1.available()]; // not the right way ? 
    byte arr_2[] = new byte[ais_2.available()]; 
    ais_1.read(arr_1); 
    ais_2.read(arr_2); 


} catch(Exception exc) { 
    System.out.println(exc); 
} 
} 

}

上記コードからiがais_1,ais_2ためのバイトarray1,array2を有します。これらの2バイトの配列(arr_1,arr_2)を連結し、それらをオーディオストリームに変換する方法はありますか?私は2つのオーディオファイルを連結したい。

+1

それは完全な答えではないので、私はこのコメントを作っている:私は() '必ずしも.available戻ります'とは思いませんストリーム内で使用可能な合計バイト数代わりに 'ais_1.frameLength * ais_1.frameSize'を使ってください。 – MusiGenesis

答えて

3

あなたが(私のコメントを参照してください)手に2つのバイト配列を持っていたら、このような第三の配列にそれらを連結することができます

byte[] arr_combined = new byte[arr_1.length + arr_2.length]; 
System.arraycopy(arr_1, 0, arr_combined, 0, arr_1.length); 
System.arraycopy(arr_2, 0, arr_combined, arr_1.length, arr_2.length); 

まだ、完全な答え、申し訳ありませんが、この配列はただであるとしてサンプルデータ - ヘッダーの後ろにデータを書き出す必要があります。私はAudioSystem APIを使ってこれを行う方法を見ていませんでした。

編集:これを試してみてください。

Join two WAV files from Java?

+0

バイト配列_から音声を戻す方法がない場合は、どうすれば2つのオーディオファイルを連結できますか? –

+0

@ MusiGenesisはい、それは良い方法です! –

関連する問題