3

2 つの wav ファイルを連結するこの単純なコードがあります。非常にシンプルで、コードはエラーなしで実行されます。しかし、出力ファイルに問題があります。生成された出力ファイルは再生されません。驚いたことに、入力ファイル「a.wav」と「b.wav」のサイズは両方とも 500Kb を超えているのに対し、そのサイズはわずか 44 バイトです。

これが私のコードです:

import java.io.File;
import java.io.IOException;
import java.io.SequenceInputStream;
import javax.sound.sampled.AudioFileFormat;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;

public class WavConcat {
    public static void main(String[] args) {
        String wFile1 = "./sounds/a.wav";
        String wFile2 = "./sounds/b.wav";

        try {
            AudioInputStream clip1 = AudioSystem.getAudioInputStream(new File(wFile1));
            AudioInputStream clip2 = AudioSystem.getAudioInputStream(new File(wFile2));

            AudioInputStream appendedFiles = 
                            new AudioInputStream(
                                new SequenceInputStream(clip1, clip2),     
                                clip1.getFormat(), 
                                clip1.getFrameLength() + clip2.getFrameLength());

            AudioSystem.write(appendedFiles, 
                            AudioFileFormat.Type.WAVE,new File("./sounds/ab.wav"));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
4

2 に答える 2

2

このような構造を試してください。これは私のために働いた

List audioInputStreamList = new ArrayList();

    String wFile1 = "./sounds/a.wav";
    String wFile2 = "./sounds/b.wav";

 AudioInputStream audioInputStream1 = AudioSystem.getAudioInputStream(new File(wFile1));
 AudioInputStream audioInputStream2 = AudioSystem.getAudioInputStream(new File(wFile2));

 audioInputStreamList.add(audioInputStream1);
 audioInputStreamList.add(audioInputStream2);

 AudioFormat audioFormat = audioInputStream1.getFormat(); // audioInputStream2 format also same

 AudioInputStream udioInputStream = new SequenceAudioInputStream(audioFormat,audioInputStreamList);

 AudioSystem.write(audioInputStream, AudioFileFormat.Type.WAVE,new File("./sounds/ab.wav"));

アップデート

SequenceAudioInputStreamを確認する

于 2012-11-14T15:43:12.007 に答える
1

clip1.getFormat()返品-->

MPEG2L3 24000.0 Hz, unknown bits per sample, mono, unknown frame size, 41.666668 frames/second

clip2.getFormat()返品-->

MPEG2L3 24000.0 Hz, unknown bits per sample, mono, unknown frame size, 41.666668 frames/second

それは奇妙なフォーマットです。MPEG2L3JavaSoundにはMP3用の組み込みエンコーダーがないため、「サンプルあたりの不明なビット」が問題を引き起こしていると想像できますが、 . 正しくエンコードされていないようです。それらをサウンド編集ソフトウェアにロードして、Java Sound が「すぐに」理解できる WAV または AU のタイプとして保存してみてください。うまくいけば、編集ソフトウェア:

  1. 壊れたMP3を理解できる、そして..
  2. 有効な WAV または AU を書き込みます。

変換中にそれらを 8 ビット モノラル & 8KHz に変換できる場合、byte[]サイズが 6 分の 1 に縮小される可能性があります。ブラウザに聞こえるので、サイズを小さくすることが重要です。

于 2012-11-15T10:57:37.233 に答える