【问题标题】:Using PCM format of AWS Polly使用 AWS Polly 的 PCM 格式
【发布时间】:2017-08-22 20:50:40
【问题描述】:

我正在尝试使用 AWS lambda 中的 JavaScript SDK(通过使用 API 网关的 REST API 公开)使用 AWS Polly(用于 TTS)。获得 PCM 输出没有问题。这是一个简短的呼叫流程。

.NET 应用程序 --> REST API (API 网关) --> AWS Lambda (JS SDK) --> AWS Polly

.NET 应用程序(我也使用 POSTMAN 进行测试)获取以下格式的音频流缓冲区。

{"type":"Buffer","data":[255,255,0,0,0,0,255,255,255,255,0,0,0,0,0,0,255,255,255,255,0,0,0,0,255,255,255,255,255,255,255,255,0,0,255,255,255,255,0,0,0,0,255,255,255,255,0,0,255,255,255, more such data]

现在我不知道如何将其转换回原始 PCM。我希望它将这些数据作为原始 PCM 发回,但找不到方法。我也无法理解为什么 AWS 会以这种格式发回数据。使用那里的控制台,可以获取原始 PCM 格式的音频(然后我可以将其提供给 Audacity),但使用 SDK 并不那么简单。还是我错过了一些非常基本的东西?

对此有任何建议/提示吗?谢谢。

【问题讨论】:

  • 他们没有以奇怪的格式发送数据。当您将二进制 Buffer 对象强制转换为 JSON 时,这就是 Node 中发生的情况。它是二进制内容,JSON 不能处理任意八位字节,只能处理字符数据,因此它被表示为二进制字节值的数组。您可能需要在 JS 中对原始缓冲区进行 base64 编码(以避免这种隐式转换)并将它们传送到设置了适当标志的 API Gateway,然后它们将被解码为原始八位字节并返回给客户端。
  • 感谢您的提示。那完成了工作。再次感谢!
  • 很高兴听到这个消息。您是否会在下面写下答案,以帮助将来发现您的问题的其他人,包括代码 sn-ps 和您需要更改的任何设置? (请?)

标签: aws-lambda text-to-speech amazon-polly


【解决方案1】:

正如 Michael 提到的(在评论中),从 Polly 发回响应会导致流变成 JSON 对象。在 base64 中对从 Polly 接收的缓冲区进行编码可以解决此问题。这是代码示例现在的样子 -

polly.synthesizeSpeech(params, function(err, data) {
    if (err) console.log(err, err.stack); // an error occurred
    else     console.log(data);           // successful response

    //old code
    //callback(null, data.Audiostream); //this converts buffer to JSON obj
    //use below instead
    if (data && data.AudioStream instanceof Buffer) {

        var buf = data.AudioStream.toString('base64');
        callback(null, buf);
    }
});

PS:我在 AWS lambda 上使用 AWS 开发工具包

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-28
    • 2018-12-13
    • 2019-04-27
    • 1970-01-01
    • 1970-01-01
    • 2018-07-17
    • 2018-12-23
    相关资源
    最近更新 更多