【发布时间】:2017-12-19 19:55:41
【问题描述】:
我有一个使用 Microsoft Bot Framework 创建的机器人,它使用 Skype 作为渠道。当用户尝试通过使用其中一个移动应用程序(Android 或 iOS)发送音频来与机器人交谈时,我希望能够从附件中获取音频并将其发送到 Bing Speech API 以便将其转换为文本。
我在执行此操作时遇到了一些问题,我认为主要问题是 I have to send a WAV 到 Bing Speech API 的事实。我在 Bot Builder 存储库中阅读了演示,在演示中有以下代码:
var audioAttachment = activity.Attachments?.FirstOrDefault(a => a.ContentType.Equals("audio/wav"));
if (audioAttachment != null)
{
using (var client = new HttpClient())
{
var stream = await client.GetStreamAsync(audioAttachment.ContentUrl);
var text = await this.speechService.GetTextFromAudioAsync(stream);
message = ProcessText(activity.Text, text);
}
}
但是,当我通过 Skype 移动应用(我正在使用 Android 进行测试)发送音频时,我没有“音频/wav”文件类型,文件类型 (ContentType) 只是“音频”。
当我尝试使用 Postman 在 Bot State Manager API 中获取音频文件时(URL 如下所示:https://smba.trafficmanager.net/apis/v3/attachments/0-eus-d1-0000000000000/views/original),我得到的内容类型为“application/octet-stream”,但我不知道如果这是 MP3、WAV 或其他格式。
我可以在 Postman 中看到的仅有的几行是这样的:
ftypmp42isommp42pmoovlmvhd�_ ��_ ���@ymeta!hdlrmdta+keysmdtacom.android.version%ilstdata7.1.1�trak\tkhd�_ ��_ ��@mdia mdhd�_ ��_ ��D�� ,hdlrsounSoundHandle�minfsmhd$dinfdrefurl�stbl[stsdKmp4a�D'esds@ww0stts��-�stsz
我使用 ReadAsStreamAsync 方法将此内容下载到 Stream,并将此字符串传递给 Bing Speech API,位于以下端点:
然而这是我得到的:
{"RecognitionStatus":"InitialSilenceTimeout","Offset":11000000,"Duration":0}
在这种情况下,它是带有可听语音的音频,并且它不检测音频。正如我所说,我认为问题出在文件类型上。 Skype 使用的文件类型是什么,如何使用该文件调用 Bing Speech API?
【问题讨论】:
标签: c# botframework skype chatbot microsoft-cognitive