Как объединить файлы WAV в C#

У меня есть 2 файла WAV, которые я хочу объединить в один файл с двумя звуковыми дорожками.

Есть ли API для этой задачи или какие-то встроенные команды в.NET, которые я могу использовать каким-то гениальным образом, чтобы сделать эту задачу возможной?

Большое спасибо за помощь.:)

5 ответов

Решение

Если я не ошибаюсь, вы можете просто добавить байты из второго файла в конец первого. Если есть какие-либо данные заголовка, вы должны исключить это (см. Здесь)

Имейте в виду, что вы можете услышать щелчок или треск между двумя клипами, так как не будет смешения. Вероятно, вы могли бы обойти это путем затухания (постепенно уменьшая значения за последние несколько мс до центрального значения).

Извините, мне было немного неясно. Я не хочу объединять их, чтобы они играли синхронно. Я хочу добавить треки в конец друг друга, чтобы они воспроизводились один и один за другим в одном файле.

Но я думаю, что нашел ответ в этой теме.

Он отлично работает и использует технику Джона Б., упомянутую ранее.

Если вам нужно сделать это только один раз, тогда лучше всего использовать программное обеспечение специально для этой задачи. Praat или смелость сделает это (объедините или объедините два трека).

На Praat также можно создавать сценарии, поэтому можно создавать сценарии Praat, а затем вызывать Praat и сценарий из приложения.Net.

обкрадывать

Прямой способ - интерпретировать заголовки wav-файлов, извлекать сэмплы и чередовать сэмплы из обоих файлов в новый поток сэмплов, который вы записываете в новый wav-файл. Вы также можете добавить сэмплы значений обоих исходных файлов wav сэмплировать за сэмплом, чтобы "смешать" оба файла в одну дорожку. Формат файла WAV не так сложен, поэтому не должно быть слишком сложно написать этот код. Кроме того, существует множество проектов с открытым исходным кодом, содержащих код для чтения и записи wav-файлов. Обратите внимание, что вещи могут стать несколько сложнее, поскольку оба исходных файла wav имеют разную частоту дискретизации. Проверьте это для описания формата WAV.

Да, вы можете просто добавить данные второго wav (исключая его заголовки) как sais Jon B, но вы также должны изменить заголовок первого файла, чтобы указать новую длину, в противном случае некоторые аудиоплееры остановятся в конце первого часть.

Для динамической конкатенации, так как вы не знаете размер общего wav-файла в начале, вы можете указать фиктивную длину в заголовке первого файла, например, указать длительность 10 часов.

Тогда аудиоплеер должен просто подождать, пока вы добавите все данные. Это работает для ffmpeg по крайней мере

Другие вопросы по тегам