2012-03-02 3 views
0

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

Это, как я попытался преобразовать его в 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); 
+0

Пожалуйста, покажите, как bwp используется или определяется где вы его создаете.? – MethodMan

+0

какая версия NAudio вы используете ..? вот ссылка, на которую вы также можете посмотреть. http://opensebj.blogspot.com/2009/04/naudio-tutorial-5-recording-audio.html – MethodMan

ответ

0

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

Существует пример проекта по CodeProject делает это:
http://www.codeproject.com/KB/cs/Streaming_wave_audio.aspx
Я не знаю, как низко латентность.

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

1

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

Смежные вопросы