Bing语音识别服务 - SpeechClient问题"音频格式无法解析。"

时间:2016-12-13 08:36:48

标签: c# audio speech-recognition bing pcm

我们目前正在实时流媒体方案中评估Bing语音识别服务。我们正在获得PCM编码音频的实时流(16k采样率,16位,1通道(也称为单声道))并尝试将其发送到Bing语音识别服务。

我们已成功使用https://www.nuget.org/packages/Microsoft.ProjectOxford.SpeechRecognition-x64/中的DataRecognitionClient与我们的场景,方法是在流式传输音频之前发送音频格式,如下所示: _dataRecognitionClient.SendAudioFormat(SpeechAudioFormat.create16BitPCMFormat(16000));

然后,我们将循环播放音频流,如下所示:

_dataRecognitionClient.SendAudio(buffer, bytesRead);

这很好用。但是我们假设ProjectOxford库可能会被弃用,因为官方Bing语音识别网站(https://www.microsoft.com/cognitive-services/en-us/Speech-api/documentation/GetStarted/GetStartedCSharpServiceLibrary)指向不同的Nuget包,请参阅:https://www.nuget.org/packages/Microsoft.Bing.Speech/

当我们使用此软件包中的SpeechClient时,我们看到提到的"音频格式无法解析"在SpeechClient上执行RecognizeAsync时出错。

var speechInput = new SpeechInput(producerConsumerStream,
new RequestMetadata(Guid.NewGuid(), new DeviceMetadata(DeviceType.Near,
DeviceFamily.Desktop, NetworkType.Ethernet, OsName.Windows, "Azure",
"Microsoft", "Current"), new ApplicationMetadata("App", "1.0"), "Speech"));
await _speechClient.RecognizeAsync(speechInput, new CancellationToken());

最后一行抛出错误。我们假设这是因为我们的PCM流没有WAVE / RIFF标头,因为它是流式传输。对于流式方案,DataRecognitionClient具有" SendAudioFormat"方法

SpeechClient不支持流式传输方案吗?

1 个答案:

答案 0 :(得分:1)

回答我自己的问题。我们已经通过在流中添加一个假的总样本数量(也就是长度)的WAVE标头解决了这个问题,请参阅:Create valid wav file header for streams in memory