我正在尝试发布到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或语言”}“
文档说,如果我不定义语言而是仅发送文本,则应使用默认语音。然后,有一个“用户代理”,应该是“应用程序名称”。该文档没有说明是否应该在某处预定义它或它指的是什么。
该错误是什么意思以及如何解决?以“原始数据”发布时,我做错了吗?它说我应该将文本发布在请求的正文中。
答案 0 :(得分:0)
文档中有一些不清楚的地方。
如果您对提供的示例here有详细的了解,请执行以下操作:
您想做一些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下)发布了有关此问题的问题