我正在尝试使用 AWS Polly(用于 TTS(和 AWS lambda 中的 JavaScript SDK(通过使用 API 网关的 REST API 公开(。获取 PCM 输出没有问题。以下是简短的呼叫流程。
.NET 应用程序 --> 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 就不那么简单了。还是我错过了一些非常基本的东西?
对此有什么建议/提示吗?谢谢。
正如迈克尔(在评论中(提到的,从 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 开发工具包