Aws lambda 使用AWS Polly的PCM格式

Aws lambda 使用AWS Polly的PCM格式,aws-lambda,text-to-speech,amazon-polly,Aws Lambda,Text To Speech,Amazon Polly,我正在尝试使用AWS lambda的JavaScript SDK(通过使用API网关的REST API公开)来使用AWS Polly(用于TTS)。获取PCM输出没有问题。下面是一个简单的调用流程 .NET应用程序-->REST API(API网关)-->AWS Lambda(JS SDK)-->AWS Polly NET应用程序(am也使用POSTMAN进行测试)获取以下格式的音频流缓冲区 {"type":"Buffer","data":[255,255,0,0,0,0,255,255,255

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

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

NET应用程序(am也使用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会以这种格式发送数据。使用there控制台,可以获得原始PCM格式的音频(然后我可以将其提供给Audacity),但使用SDK就不那么简单了。还是我错过了一些基本的东西

有什么建议/提示吗?谢谢。

正如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);
    }
});

注:我在AWS lambda上使用AWS SDK

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