【问题标题】:AWS Polly REST API returns unreadable string - javascriptAWS Polly REST API 返回不可读的字符串 - javascript
【发布时间】:2017-04-13 15:08:45
【问题描述】:

我正在尝试在浏览器 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��`�ù�CNX�DDDGwws����'��wDDDB��D/��?����!+��������.... ...一堆随机数据。

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

有什么想法吗?

谢谢!

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

更新

通过将响应拼写错误更改为 blob 而不使用 ajax 而是使用本机 javascript POST 请求来解决问题。

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

【问题讨论】:

  • 您正在取回 MP3 - 您需要将它提供给可以播放结果的设备。
  • 我想用html&lt;audio src="" /&gt;标签播放它,但是如何转换它以填充src参数?
  • 无需转换,您已有音频文件。
  • 是的,你是对的,我有,但 Polly 以文本格式提供给我。如何转换它以便我可以播放它?

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


【解决方案1】:

更多更新: 似乎你需要做一些洗牌。这看起来很接近:https://stackoverflow.com/a/23082623/1483006 一旦我到达我的办公桌,将更新一个示例。

更新: 因此,您从 API 中获得了正确的结果。它正在向您发送所请求演讲的 mp3 文件。然后,您的服务器应用程序应使用“Content-Type: audio/mpeg”将此 mp3 返回到调用 Web 浏览器。

一个总结所有这些的例子;在客户端(Web 浏览器)中创建一个音频元素,其源 URL 指向您的服务器应用程序。在应用程序的处理程序中,从 Polly 检索 mp3 并将其与适当的标头(“Content-Type: audio/mpeg”)一起发送回去。应该很简单。

旧: 我可以强烈建议让图书馆为你做这件事吗:https://github.com/ejbeaty/ChattyKathy

至少,仔细阅读它以了解如何自己实现它。

【讨论】:

  • 我在没有库的情况下实现它,因为我想在服务器端签署请求,并使用docs.aws.amazon.com/general/latest/gr/… 在客户端实际生成它。这就是为什么我想把上面的字符串转换成可以播放的格式。
  • “字符串”不是字符串。这是 mp3 音频的原始字节。您需要找到一种方法将其发送给客户端,而实现方式取决于客户端如何向您发出请求——触发您调用 Polly 的请求。
  • 以上代码在客户端。服务器与 polly 和发送请求无关。正在客户端上完成对 polly 的请求,并在那里接收数据。但是如何在 html 音频标签中播放呢?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-16
  • 2022-01-19
  • 1970-01-01
  • 2022-07-02
  • 1970-01-01
相关资源
最近更新 更多