Pergunta

I'd like to use WaveIn / WaveProvider / WavOut feature from NAudio to manipulate the Microhpone (or other source)

WaveIn recorder = new WaveIn();
recorder.DataAvailable += RecorderOnDataAvailable;
BufferedWaveProvider buffer = new BufferedWaveProvider(recorder.WaveFormat);

But at the end I need to convert the buffer to stream because SpeechRecognitionEngine works with Stream.

engine.SetInputToAudioStream(stream, format);

How can I pipe a WavProvider to a Stream ?

Foi útil?

Solução

Ok so I figure out a working solution:

1) Build a WaveIn

  waveIn = new WaveInEvent();
  waveIn.DeviceNumber = 0;
  waveIn.WaveFormat = new WaveFormat(16000, 2);
  waveIn.DataAvailable += waveIn_DataAvailable;

2) Build a PipeStream

  buffer = new PipeStream();
  engine.SetInputToAudioStream(buffer, waveIn.WaveFormat);

3) Copy WaveIn to Buffer

void waveIn_DataAvailable(object sender, WaveInEventArgs e) {
  buffer.Write(e.Buffer, 0, e.BytesRecorded);
}

It works fine and there is no need to worry about. Buffer size already handle by PipeStream.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top