私が取り組んでいるプロジェクトでは、複数の .wav ファイルを連結できるようにしたいと考えています。
私の研究を通じて、私はこのコードを思いつくことができました:
File sample1 = new File("F:\\Programming\\Resources\\Java_Sound\\trumpet1.wav");
File sample2 = new File("F:\\Programming\\Resources\\Java_Sound\\trumpet2.wav");
File fileOut = new File("F:\\Programming\\Resources\\Java_Sound\\Test.wav");
AudioInputStream audio1 = AudioSystem.getAudioInputStream(sample1);
AudioInputStream audio2 = AudioSystem.getAudioInputStream(sample2);
AudioInputStream audioBuild = new AudioInputStream(new SequenceInputStream(audio1, audio2), audio1.getFormat(), audio1.getFrameLength() + audio2.getFrameLength());
//for(int i = 0; i < 5; i++){
// audioBuild = new AudioInputStream(new SequenceInputStream(audioBuild, audio2), audioBuild.getFormat(), audioBuild.getFrameLength() + audio2.getFrameLength());
//}
AudioSystem.write(audioBuild, AudioFileFormat.Type.WAVE, fileOut);
2 つの .wav ファイルを結合する場合は問題なく動作しますが、for ループのコメントを外すと、生成された .wav ファイルは最初の連結のオーディオのみを再生します。wmp のデュレーション バーは画面全体の約 1\5 しか移動しないため、オーディオ トラックが早く終了するように見えます。
問題は、作成された .wav ファイルのヘッダーにあると想定しています。ヘッダーがどのように構築されているかについて議論している多くの異なる Web ページを調査しましたが、それらはすべてわずかに異なる定義を持っていましたが、ヘッダーは 16 進数でなければならないと言っていました。ストリーム (オーディオ ストリームではなく、標準の FileInputStream) を変換するとき、私が持っていたヘッダーは 10 進数でした。また、RIFF 部分の後、WAVE 部分の前は、最初の 8 バイトを含まないファイル全体のサイズであると想定されています。ただし、一部にはハイフンが含まれていました。正直なところ、私はそれらが何を意味するのか見当がつきません。ただし、それらを無視しても、上記のコードのコメントを外した後のテスト ファイルのサイズは依然として大きい数値です。
したがって、複数のオーディオ ファイルを連結する方法と .wav ヘッダーを作成/管理する方法の両方を調査した後でも、オーディオの残りの部分が再生されない理由がわかりません。どんな助けでも大歓迎です。前もって感謝します。