Использование формата PCM AWS Polly
Я пытаюсь использовать AWS Polly (для TTS), используя JavaScript SDK от AWS lambda (который предоставляется через REST API с использованием API-шлюза). Нет проблем в получении вывода PCM. Вот поток вызовов вкратце.
Приложение.NET -> REST API (шлюз API) -> AWS Lambda (JS SDK) -> AWS Polly
Приложение.NET (я тоже использую POSTMAN для тестирования) получает буфер аудиопотока в следующем формате.
{ "Типа":"буфер","данные":[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, больше таких данных]
Теперь я не знаю, как преобразовать его обратно в сырой PCM. Я хотел бы, чтобы он отправил эти данные обратно в виде необработанного PCM, но не смог найти способ сделать это. Я также не могу понять, почему AWS отправляет данные обратно в таком формате. Используя там консоль, можно получить аудио в необработанном формате PCM (который я затем могу передать в Audacity), но не все так просто с SDK. Или я упускаю что-то действительно простое?
Любые предложения / советы по этому поводу? Благодарю.
1 ответ
Как отметил Майкл (в комментарии), отправка ответа от Полли заставляет поток превращаться в объект JSON. Кодирование полученного буфера от Polly в base64 исправляет это. Вот как выглядит пример кода:
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 SDK на AWS лямбда