Azure“文本转语音”返回“无效的CID或语言”。这是什么意思?

时间:2019-01-11 21:29:57

标签: azure text-to-speech azure-cognitive-services

我正在尝试发布到Azure文本语音转换服务。我已经获取了访问令牌,现在我正试图打电话将文本转换为语音(使用Unity中的最佳HTTP):

            HTTPRequest request = new HTTPRequest(new Uri(APIEndpointURL), HTTPMethods.Post, _GotTextToSpeechResponse);

        request.AddHeader("Authorization", "Bearer " + accessToken);
        request.AddHeader("Content-Type", "application/ssml+xml");
        request.AddHeader("X-Microsoft-OutputFormat", "raw-16khz-16bit-mono-pcm");
        request.AddHeader("User-Agent", "My app name");

        request.RawData = Encoding.UTF8.GetBytes("Hello world!");
        request.Send();

这将返回状态代码400,其中包含以下内容:

  

{“消息”:“无效的CID或语言”}“

文档说,如果我不定义语言而是仅发送文本,则应使用默认语音。然后,有一个“用户代理”,应该是“应用程序名称”。该文档没有说明是否应该在某处预定义它或它指的是什么。

该错误是什么意思以及如何解决?以“原始数据”发布时,我做错了吗?它说我应该将文本发布在请求的正文中。

1 个答案:

答案 0 :(得分:0)

文档中有一些不清楚的地方。

如果您对提供的示例here有详细的了解,请执行以下操作: sample from doc

端点

您想做一些text-to-speech功能(为您的Hello world!文本生成语音),但是您正在呼叫一个stt(语音到文本)端点,用于语音识别:

https://westeurope.stt.speech.microsoft.com/speech/recognition/conversation/cognitiveservices/v1

要使用tts,端点的格式应与示例相同:

https://westeurope.tts.speech.microsoft.com/cognitiveservices/v1

请求内容

关于您不想使用SSML的事实,文档指出:

  

文本作为HTTP POST请求的正文发送。可以是纯文本   (ASCII或UTF-8)或语音合成标记语言(SSML)格式   (UTF-8)。纯文本请求使用语音服务的默认语音   和语言。使用SSML,您可以指定语音和语言。

因此,我尝试了以下操作:将内容类型从"application/ssml+xml"更改为"text/plain"。但是在那种情况下,我得到了:

Error 400 Data at the root level is invalid. Line 1, position 1.

在解析xml时,这似乎是一个常见错误,因此这里似乎存在一个错误,并且我在使用TTS且没有ssml的文档中找不到示例。

有人在页面的“反馈”部分(“后续步骤here下)发布了有关此问题的问题