Запись в MemoryStream с помощью NAudio - PullRequest
1 голос
/ 02 марта 2012

Я пытаюсь использовать NAudio для записи с микрофона и сохранения этих данных в MemoryStream. Кажется, не существует очевидного способа, и каждый раз, когда я пытаюсь прочитать с моего BufferedWaveProvider, запись больше не воспроизводится при использовании WaveOut.Play. Это запись играет хорошо, если я удаляю мою попытку чтения. Есть ли способ записи в MemoryStream?

Вот как я пытался преобразовать его в MemoryStream:

Byte[] stream = new byte[bwp.BufferedBytes]; 
bwp.Read(stream, 0, bwp.BufferedBytes);
wo.Play(); //plays fine only if I comment out the Read line above
MemoryStream ms = new MemoryStream(stream);

Ответы [ 2 ]

2 голосов
/ 02 марта 2012

WaveProvider может иметь только одного потребителя метода чтения. Я предлагаю, чтобы в момент добавления байтов в BufferedWaveProvider вы также добавляли их в свой поток памяти. Альтернативой является наследование от IWaveProvider, а в методе Read - чтение из BufferedWaveProvider и запись того, что вы прочитали в MemoryStream перед возвратом. Затем используйте этот WaveProvider для передачи WaveOut.

0 голосов
/ 02 марта 2012

Существует ссылка на проект кода вместе с исходным кодом, который вы можете загрузить, чтобы помочь вам сделать то, что вы пытаетесь.

Есть пример проекта на codeproject, который делает это:
http://www.codeproject.com/KB/cs/Streaming_wave_audio.aspx
Я не знаю, насколько низкая задержка.

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

...