Lex chatbot C#client with voice

我有聊天机器人客户端运行文本但现在想将其更改为语音,但我不知道如何从麦克风获取流发布。 为了录制音频我正在使用NAudio但是在发送内存流时我得到一个错误说明

System.IO.IOException:在写入所有字节之前无法关闭流。

这是我的代码:

private void recordAudio() { if (memoryStream == null) memoryStream = new MemoryStream(); sourceStream = new NAudio.Wave.WaveIn(); sourceStream.WaveFormat = new NAudio.Wave.WaveFormat(16000, 1); waveIn = new NAudio.Wave.WaveInProvider(sourceStream); waveWriter = new WaveFileWriter(new IgnoreDisposeStream(memoryStream), waveIn.WaveFormat); sourceStream.DataAvailable += new EventHandler(sourceStream_DataAvailable); buff = new BufferedWaveProvider(waveIn.WaveFormat); sourceStream.StartRecording(); mytimer.Enabled = true; } private void sourceStream_DataAvailable(object sender, NAudio.Wave.WaveInEventArgs e) { buff.AddSamples(e.Buffer, 0, e.BytesRecorded); Console.WriteLine("test"); } void mytimer_Tick(object sender, EventArgs e) { if (sourceStream != null) { sourceStream.StopRecording(); waveWriter.Flush(); var amazonLexClient = new AmazonLexClient(Amazon.RegionEndpoint.USEast1); var amazonPostRequest = new Amazon.Lex.Model.PostContentRequest(); var amazonPostResponse = new Amazon.Lex.Model.PostContentResponse(); amazonPostRequest.BotAlias = "voiceBot"; amazonPostRequest.BotName = "voiceBot"; amazonPostRequest.ContentType = "audio/l16; rate=16000; channels=1"; amazonPostRequest.UserId = "user"; amazonPostRequest.InputStream = memoryStream; amazonPostRequest.UserId = "test"; try { amazonPostResponse = amazonLexClient.PostContent(amazonPostRequest); Console.WriteLine("Got a response"); } catch (Exception w) { Console.WriteLine("{0} Exception caught.", e); Console.WriteLine(w.Message); } 

在将MemoryStream的位置传递给post请求之前,必须将其设置为0。

 memoryStream.Position = 0;