我正在尝试创建一个应用程序,该应用程序将从另一个服务接收原始音频数据并将其发送到 Bing Speech API 以进行识别。根据Github repo 上提供的示例,我编写了以下代码(使用 C# SDK)。
private static void sendFileData(string filename)
{
using (FileStream fs = new FileStream(filename, FileMode.Open, FileAccess.Read))
{
Console.WriteLine("Setting up audio data format.");
SpeechAudioFormat audioFormat = SpeechAudioFormat.create16BitPCMFormat(sampleRate); // sampleRate = 8000
asrClient.SendAudioFormat(audioFormat);
int bytesRead = 0;
byte[] buffer = new byte[1024];
try
{
do
{
// Get more Audio data into byte buffer.
bytesRead = fs.Read(buffer, 0, buffer.Length);
// Send audio data to service.
asrClient.SendAudio(buffer, bytesRead);
}
while (bytesRead > 0);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
finally
{
// We are done sending audio. Final recognition results will arrive in OnResponseReceived event call.
asrClient.EndAudio();
}
}
}
唯一的区别是我正在设置音频格式,因为它不是 WAVE 文件。但是,我收到的识别结果是完全错误的(我之前在 REST API 上测试过这个文件,它按预期工作)。此外,如果我使用相同的代码并发送 WAVE 文件,我会得到正确的结果。设置音频格式时我做错了吗?有谁知道这种情况的示例代码?
- 编辑 -
正如@NikolayShmyrev 所建议的,这里是测试文件的链接:https ://drive.google.com/file/d/0B7pbKnD-4XNMTlJudlZqTFNCR0k/view?usp=sharing
音频以 8000 Hz 采样并保存为 16 位有符号整数 PCM 数据。该话语是巴西葡萄牙语 (pt-br),应被识别为“eu quero uma Pizza de calabresa”。