Я разрабатываю клиент чат-бота. Мне удалось запустить его с текстовым вводом, и теперь он работает правильно. Теперь я хочу добавить функцию голосового ввода, но в настоящее время возникают проблемы. В настоящее время я использую NAudio для записи своего ввода, но у меня возникает эта ошибка
Внутреннее исключение 1: AmazonServiceException: было создано WebException со статусом RequestCanceled.
Внутреннее исключение 2: WebException: запрос был прерван: запрос был отменен.
Внутреннее исключение 3: IOException: невозможно закрыть поток, пока не будут записаны все байты.
Вот что я сделал до сих пор:
Boolean voiceEnabled = false;
private void voiceButton_Click(object sender, EventArgs e)
{
if (voiceEnabled)
{
voiceButton.BackgroundImage = Properties.Resources.mic_d;
voiceEnabled = false;
StopRecord();
}
else
{
voiceButton.BackgroundImage = Properties.Resources.mic_e;
voiceEnabled = true;
StartRecord();
}
}
WaveIn waveIn;
WaveFileWriter waveWriter;
Stream memoryStream;
private void waveIn_DataAvailable(object sender, WaveInEventArgs e)
{
if (waveWriter == null) return;
waveWriter.Write(e.Buffer, 0, e.BytesRecorded);
waveWriter.Flush();
}
private void StartRecord()
{
if (memoryStream == null)
memoryStream = new MemoryStream();
waveIn = new WaveIn();
waveIn.DeviceNumber = 0;
waveIn.WaveFormat = new WaveFormat(16000, 1);
waveIn.DataAvailable += new EventHandler<WaveInEventArgs>(waveIn_DataAvailable);
waveWriter = new WaveFileWriter(new IgnoreDisposeStream(memoryStream), waveIn.WaveFormat);
waveIn.StartRecording();
}
private void StopRecord()
{
if (waveIn != null)
{
waveIn.StopRecording();
waveIn.Dispose();
waveIn = null;
}
if (waveWriter != null)
{
waveWriter.Dispose();
waveWriter = null;
}
SendReq(memoryStream);
}
private void SendReq(Stream stream)
{
PostContentRequest postContentRequest = new PostContentRequest();
postContentRequest.BotAlias = "Test";
postContentRequest.BotName = "TestBot";
postContentRequest.ContentType = "audio/l16; rate=16000; channels=1";
postContentRequest.InputStream = stream;
postContentRequest.UserId = "user";
Task<PostContentResponse> task = amazonLexClient.PostContentAsync(postContentRequest);
task.Wait();
PostContentResponse postContentResponse = task.Result;
Console.WriteLine(postContentResponse.Message);
//this just plays the audio
PlayAudio(postContentResponse.AudioStream);
}