2

我正在尝试使用 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 并不那么简单。还是我错过了一些非常基本的东西?

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

4

1 回答 1

2

正如 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 开发工具包

于 2017-08-26T20:32:39.677 回答