Как объединить 2 или более файлов .WAV вместе программно?

Мне нужна возможность объединить два или более файла .wav вместе в один .wav-файл. Я должен делать это программно, используя C # (сторонние продукты не являются опцией). Я знаю class System.Media.SoundPlayer, но я не хочу играть в .wav, но только для его создания.

Вот базовая функция конкатенации WAV, построенная с использованием NAudio . Это гарантирует, что только fragmentы данных объединены (в отличие от примера кода в этой статье CodeProject, связанной в другом ответе). Он также защитит вас от конкатенации файлов WAV, которые не имеют одинакового формата.

public static void Concatenate(string outputFile, IEnumerable sourceFiles) { byte[] buffer = new byte[1024]; WaveFileWriter waveFileWriter = null; try { foreach (string sourceFile in sourceFiles) { using (WaveFileReader reader = new WaveFileReader(sourceFile)) { if (waveFileWriter == null) { // first time in create new Writer waveFileWriter = new WaveFileWriter(outputFile, reader.WaveFormat); } else { if (!reader.WaveFormat.Equals(waveFileWriter.WaveFormat)) { throw new InvalidOperationException("Can't concatenate WAV Files that don't share the same format"); } } int read; while ((read = reader.Read(buffer, 0, buffer.Length)) > 0) { waveFileWriter.WriteData(buffer, 0, read); } } } } finally { if (waveFileWriter != null) { waveFileWriter.Dispose(); } } } 

Один комментарий к ответу Марка:

Оператор ==, похоже, не работает для меня при сравнении волновых форматов. Это безопаснее:

 if (!reader.WaveFormat.Equals(waveFileWriter.WaveFormat)) 

Кроме того, вы можете обернуть читателя в WaveFormatConversionStream и полностью избавиться от проверки формата (не уверен, что он будет работать во всех сценариях, но я смог успешно протестировать его).

Проверьте этот пример кода, похоже, именно то, что вам нужно, с хорошим объяснением, как это сделать:

Конкатенация файлов Wave с использованием C # 2005

Похоже, что он включает в себя извлечение и объединение звуковых данных из всех wav-файлов в один fragment данных с новым заголовком файла сверху

EDIT: У меня нет опыта использования этого, и я не эксперт. Я просто наткнулся на эту статью и подумал, что это может быть полезно. См. Ответ Марка Хит для лучшего решения

Использовать как присоединиться к файлам .Wav

  private void JoinWav() { string[] files = new string[] { "1990764-ENG-CONSEC-RESPONSE7.WAV","1990764-ND_A.WAV", "1990764-SIGHT-SP.WAV", "1990764-SP-CONSEC-RESPONSE6.WAV","1990764-VOCABWORD-004-12-SP.WAV","bi-consec-1-successful.wav", "bi-transition-instruct.wav","nd_B.wav","sightreceived_B.wav","teststamp_A.wav" }; AudioCompressionManager.Join("res.wav", files); } 
  • Чтение wav-файла в Java
  • Как закодировать WAV в mp3 на устройстве Android
  • Импорт WAV-CD в iTunes без преобразования
  • Воспроизведение .mp3 и .wav в Java?
  • Как конвертировать несколько файлов одного типа (например, wav в mp3) с использованием VLC или Audacity за один удар?
  • Удалить шум из wav-файла, MATLAB
  • Давайте будем гением компьютера.