Azure文转声突然开始返回“400个错误请求”

plicqrtu  于 2023-02-09  发布在  其他
关注(0)|答案(2)|浏览(190)

我已经成功使用Azure文本到语音API几个月了,格式如下:

<speak version='1.0' xmlns='w3.org/2001/10/synthesis' xml:lang='en-US'><voice name='Microsoft Server Speech Text to Speech Voice (fi-FI, HeidiRUS)'>My text</voice></speak>

但突然这个请求又回来了:
HTTP/1.1 400错误请求
我们几个月来一直成功使用同一个请求(当然使用不同的短语),但就在几周前,同一个请求开始返回此错误。我没有获得任何其他信息,因此我不知道在哪里查找。Azure文档显示:
必需参数缺失、为空或null。或者,传递给必需参数或可选参数的值无效。常见问题是标头过长。
我也试着通过添加性别和语言以及用双引号替换单引号来使请求更具体,但没有用途:

<speak version="1.0" xmlns="w3.org/2001/10/synthesis" xml:lang="fi-FI" xml:gender="Female"><voice name="Microsoft Server Speech Text to Speech Voice (fi-FI, HeidiRUS)">Text.</voice></speak>

API中有什么变化吗?或者我的请求中缺少了什么?

y0u0uwnf

y0u0uwnf1#

当我发送以下有效负载时,我得到了包含正确内容的200 OK:

<speak version='1.0' xmlns='http://www.w3.org/2001/10/synthesis' xml:lang='en-US'><voice name='Microsoft Server Speech Text to Speech Voice (fi-FI, HeidiRUS)'>This is my test</voice></speak>

下面是我的C#代码发送这个:

// Generate request
string body = $@"<speak version='1.0' xmlns='http://www.w3.org/2001/10/synthesis' xml:lang='{voiceLang}'><voice name='{voiceName}'>{text}</voice></speak>";

using (var client = new HttpClient())
{
    using (var request = new HttpRequestMessage())
    {
        // Set the HTTP method
        request.Method = HttpMethod.Post;
        // Construct the URI
        request.RequestUri = new Uri(ttsHostUri);
        // Set the content type header
        request.Content = new StringContent(body, Encoding.UTF8, "application/ssml+xml");
        // Set additional header, such as Authorization and User-Agent
        request.Headers.Add("Authorization", "Bearer " + accessToken);
        request.Headers.Add("Connection", "Keep-Alive");
        // Update your resource name
        request.Headers.Add("User-Agent", "YOUR_RESOURCE_NAME");
        request.Headers.Add("X-Microsoft-OutputFormat", "riff-24khz-16bit-mono-pcm");
        // Create a request
        using (var response = await client.SendAsync(request).ConfigureAwait(false))
        {
            response.EnsureSuccessStatusCode();

            // Asynchronously read the response
            using (var dataStream = await response.Content.ReadAsStreamAsync().ConfigureAwait(false))
            {
                // ... Process your audio here
            }
        }
    }
}

我在我们的负载上看到的唯一区别是xmlns值,其中我有一个完整的url(带有http://),而你的没有。
错误可能在其他地方:当查询端点时你确信你正在验证你自己吗?

qq24tv8q

qq24tv8q2#

我们还突然收到了400错误,在我们的示例中,我们没有使用
<![CDATA[ your text here ]]>
在我们的代码中这样做之后,我们不再得到用户报告的400个错误。

相关问题