Запись содержимого DirectSound CaptureBuffer в файл WAV на C # - PullRequest
2 голосов
/ 18 июля 2011

Я записал звук в CaptureBuffer, но не могу понять, как сохранить его в файл wav. Я пробовал это (http://www.tek -tips.com / faqs.cfm? Fid = 4782 ), но это не сработало, или я не использовал его должным образом. Кто-нибудь знает, как это решить? Пример кода будет очень признателен.

1 Ответ

5 голосов
/ 19 июля 2011

WAV-файл - это RIFF-файл, состоящий из двух основных «кусков». Первый - это форматный блок, описывающий формат аудио. Это будет то, с какой частотой дискретизации вы записали (например, 44,1 кГц), какую битовую глубину (например, 16 бит) и сколько каналов (моно или стерео). WAV также поддерживает сжатые форматы, но маловероятно, что вы записали сжатый звук, поэтому ваш буфер записи будет содержать звук PCM.

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

В рамках проекта NAudio я создал класс WaveFileWriter , чтобы упростить создание файлов WAV. Вы передаете WaveFormat, который описывает формат захваченного аудио. Затем вы можете просто записать необработанные данные в.

Вот несколько простых примеров кода для использования WaveFileWriter:

WaveFormat format = new WaveFormat(16000, 16, 1); // for mono 16 bit audio captured at 16kHz
using (var writer = new WaveFileWriter("out.wav", format)
{
    writer.WriteData(captureBuffer, 0, captureBuffer.Length);
}
...