如何使用C#SDK将原始音频数据发送到Bing语音?

如何使用C#SDK将原始音频数据发送到Bing语音?,c#,speech-recognition,microsoft-cognitive,C#,Speech Recognition,Microsoft Cognitive,我正在尝试创建一个应用程序,它将从另一个服务接收原始音频数据,并将其发送到Bing语音API进行识别。基于,我编写了以下代码(使用C#SDK) 唯一的区别是我正在设置音频格式,因为它不是WAVE文件。但是,我收到的识别结果是完全错误的(我以前在RESTAPI上测试过这个文件,它按预期工作)。此外,如果我使用相同的代码并发送一个WAVE文件,我会得到正确的结果。设置音频格式时是否有问题?有人知道这种情况下的示例代码吗 --编辑-- 根据@NikolayShmyrev的建议,这里有一个指向测试文件的

我正在尝试创建一个应用程序,它将从另一个服务接收原始音频数据,并将其发送到Bing语音API进行识别。基于,我编写了以下代码(使用C#SDK)

唯一的区别是我正在设置音频格式,因为它不是WAVE文件。但是,我收到的识别结果是完全错误的(我以前在RESTAPI上测试过这个文件,它按预期工作)。此外,如果我使用相同的代码并发送一个WAVE文件,我会得到正确的结果。设置音频格式时是否有问题?有人知道这种情况下的示例代码吗

--编辑--

根据@NikolayShmyrev的建议,这里有一个指向测试文件的链接:


音频采样频率为8000 Hz,并保存为16位带符号整数PCM数据。这句话是用巴西葡萄牙语(pt br)说的,应该被认为是“eu quero uma PIZA de calabresa”。

很可能是您发送的音频格式错误。即,原始音频具有一些不同的采样率或采样表示。您可以共享该文件的示例以获得帮助。@NikolayShmyrev我也这么认为,但通过REST发送该文件会得到正确的结果。据我所知,这似乎是我使用SDK设置音频格式的方式的问题。为了确定,我已经用sox测试了音频。这是一个16位有符号整数单声道,采样频率为8000 Hz。不太清楚您是如何使用sox测试原始音频的。我只是使用sox使用我提到的设置播放文件。但是我做了双重检查,似乎我只得到了WAV(而不是原始数据)来处理RESTAPI。正如您所提到的,它可能与示例表示有关。我将更新我的问题以包含指向测试文件的链接。很可能是您发送的音频格式错误。即,原始音频具有一些不同的采样率或采样表示。您可以共享该文件的示例以获得帮助。@NikolayShmyrev我也这么认为,但通过REST发送该文件会得到正确的结果。据我所知,这似乎是我使用SDK设置音频格式的方式的问题。为了确定,我已经用sox测试了音频。这是一个16位有符号整数单声道,采样频率为8000 Hz。不太清楚您是如何使用sox测试原始音频的。我只是使用sox使用我提到的设置播放文件。但是我做了双重检查,似乎我只得到了WAV(而不是原始数据)来处理RESTAPI。正如您所提到的,它可能与示例表示有关。我将更新我的问题以包含到测试文件的链接。
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();
        }
    }
}