1

我正在尝试创建一个应用程序,该应用程序将从另一个服务接收原始音频数据并将其发送到 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”。

4

0 回答 0