AWS Polly REST API返回不可读的字符串--javascript

时间:2017-04-10 21:36:19

标签: javascript amazon-web-services post text-to-speech amazon-polly

我正尝试在浏览器javascript中使用AWS Polly REST API 制作一个简单的 POST请求来合成纯文本语音。由于某些外部原因,我没有使用AWS JS SDK。这是我的要求:

 $.ajax({
        url: 'https://polly.us-west-2.amazonaws.com/v1/speech',

        type: 'POST',

        data:'{"OutputFormat":"mp3","Text":"Some text to listen","TextType":"text","VoiceId":"Joanna"}',

        dataType: 'text',

        beforeSend: function(xhr){

           xhr.setRequestHeader('Authorization', '<String>');

           xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');
        },

        success: function(result){
           console.log(result);
        }

});

请求成功但在打印结果时收到以下

ID3#TSSELavf57.56.101`ùCNXDDDGwws'wDDDBD/?!+ .... ......一堆随机数据。

我尝试编码并以某种方式操纵它,但没有任何效果。我浏览了所有AWS Polly文档,大部分stackoverflow帖子但没有结果。文档说我需要以特定格式接收AudioStream,我的响应只是一个不可读的字符串。

有什么想法吗?

谢谢!

以下是文档,如果它们可以帮助您更好地理解问题:http://docs.aws.amazon.com/polly/latest/dg/API_SynthesizeSpeech.html

更新

通过在不使用ajax的情况下将响应拼写更改为blob,而是使用本机javascript POST请求来解决问题。

var xhr = new XMLHttpRequest();
xhr.addEventListener("readystatechange", function(){
   // something
}
xhr.open('POST')
xhr.setRequestHeader(...)
xhr.responseType = 'blob'

1 个答案:

答案 0 :(得分:0)

更新更新 好像你需要做一些洗牌。这看起来很近:https://stackoverflow.com/a/23082623/1483006 一旦我到达我的办公桌,就会以示例更新。

<强>更新 因此,您可以从API获得正确的结果。它会向您发送所请求语音的mp3文件。然后,您的服务器应用程序应将此mp3返回到调用的Web浏览器,其中包含&#34; Content-Type:audio / mpeg&#34;。

将所有这些包装起来的一个例子;在客户端(Web浏览器)中创建一个音频元素,其源URL指向您的服务器应用程序。在应用程序的处理程序中,从Polly检索mp3并使用适当的标题将其发回(&#34; Content-Type:audio / mpeg&#34;)。应该非常简单。

<强>旧: 我强烈建议您让图书馆为您执行此操作:https://github.com/ejbeaty/ChattyKathy

至少,请仔细阅读有关如何自行实施的建议。