Подтвердить что ты не робот

Присоединить два файла WAV от Java?

Каков самый простой способ объединить два файла WAV в Java 1.6? (Равная частота и все, ничего необычного.)

(Это, наверное, так просто, но мой Google-fu кажется слабым по этому вопросу сегодня.)

4b9b3361

Ответ 1

Вот код barebones:

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 WavAppender {
    public static void main(String[] args) {
        String wavFile1 = "D:\\wav1.wav";
        String wavFile2 = "D:\\wav2.wav";

        try {
            AudioInputStream clip1 = AudioSystem.getAudioInputStream(new File(wavFile1));
            AudioInputStream clip2 = AudioSystem.getAudioInputStream(new File(wavFile2));

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

            AudioSystem.write(appendedFiles, 
                            AudioFileFormat.Type.WAVE, 
                            new File("D:\\wavAppended.wav"));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

Ответ 2

Заголовок WAV не должен быть слишком сильным для синтаксического анализа, и если я правильно прочитаю это описание заголовка, вы можете просто удалить первый 44 байта от второго WAV и просто добавьте байты к первому. После этого вы, конечно, должны изменить некоторые поля заголовка первого WAV, чтобы они содержали правильную новую длину.

Ответ 3

Я нашел this (AudioConcat) через ссылку "Образцы кода и приложения" на здесь.

Ответ 4

Ваша проблема возникает, если два файла WAV не имеют одинакового формата в заголовке волны.

Если форматы волн в двух файлах не совпадают, вам нужно будет найти способ их трансформировать, чтобы они соответствовали.

Это может быть перекодировка MP3 или другие виды транскодирования (если один из них закодирован с помощью кодека MP3).

Ответ 5

Моя проблема в том... что я добавил волну молчания перед нормально воспроизводимым аудиофайлом.

Но единственное, что будет играть - это тишина.

Вот мой код:

long silenceLength = (long)monoWaveformImageView[index].getTranslateX() * 10;

silenceInput = AudioSystem.getAudioInputStream(new File("C:\\Users\\Mirco\\048298C9A4D3490B9FF9AB023A9238F3.TMP\\Desktop\\StudioLab Sources\\Silence.wav").getAbsoluteFile());
silenceStream = new AudioInputStream(silenceInput, silenceInput.getFormat(), silenceLength);

File cutedSilenceFile = new File("Cuted_Silence.wav");
AudioSystem.write(silenceStream, AudioFileFormat.Type.WAVE, cutedSilenceFile);

cutedSilenceInputStream = AudioSystem.getAudioInputStream(cutedSilenceFile.getAbsoluteFile());
fileInput = AudioSystem.getAudioInputStream(file[index].getAbsoluteFile());

appendedFiles = new AudioInputStream(
new SequenceInputStream(cutedSilenceInputStream, fileInput),     
cutedSilenceInputStream.getFormat(), 
cutedSilenceInputStream.getFrameLength() + fileInput.getFrameLength());
AudioSystem.write(appendedFiles, AudioFileFormat.Type.WAVE, file[index]);
fileInput.close();
cutedSilenceInputStream.close();
silenceStream.close();
appendedFiles.close();