使用 AWS Polly 的 PCM 格式

Using PCM format of AWS Polly

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

.NET application --> REST API (API gateway) --> 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 就没那么简单了。还是我错过了一些非常基本的东西?

关于这个的suggestions/tips吗?谢谢

正如 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 SDK