Использование формата 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 лямбда

Другие вопросы по тегам