Настольный клиент для Yandex Speechkit text2speech на коленке

—

от автора

Вчера понадобилось мне записать голос для голосового (IVR) меню. Решил воспользоваться голосами от яндекс.облака, тем более что они теперь все высококачественные, и от человеческого неотличимы. Но как бы это сделать поудобнее, чтобы не надо было потом файлы редактировать и конвертировать? Казалось бы, можно воспользоваться демкой на странице описания, но во первых там есть ограничение длины текста, во вторых она дает сохранить только запись в формате ogg, и в третьих иногда добавляет в запись рекламу. Оно и понятно в общем то, эта демка предназначена для показа технологии а не для коммерческого использования.

Резюме — надо получать записи как положено, через api, тем более что оно простое и понятное, только небольшая сложность с авторизацией. Но то что оно несложное не значит что им можно легко и просто с нуля воспользоваться, нужен хоть какой то интерфейс.

Беглый гуглёж ничего не принес, только несколько малопонятных проектов на гитхабе.

Уже думал быстренько наваять какой нибудь свой веб-интерфейс но тут вспомнил что есть Postman. Для тех кто не в теме — это замечательная программа для тестирования любых api интерфейсов.

Для дальнейших действий предполагается что вы уже зарегистрированы в яндекс.облаке, ваш аккаунт активен и оплачен (деньгами или грантом).

Итак, вооружимся документацией. Запрос к text2speech по сути это простой post запрос. Параметры передаются в теле запроса. Единственная сложность — это авторизация. Подписывать запросы надо IAM токенами, но у них срок жизни — до 12 часов, в некоторых случаях меньше. Яндекс рекомендует обновлять токены раз в час или вообще получать при каждом запросе. Получить токен можно в командной строке, но если это не автоматизировать, это придется делать руками и часто.

К счастью, у postman есть функционал pre-request script. Это когда программа, перед тем как отправить запрос к api, выполняет какие то действия. Скрипты пишутся там на js, ничего сложного. Результаты потом отправляются в запрос в переменных.

Получим сначала пару нужных значений: id каталога и oauth-токен.

Первое берется просто из адресной строки браузера

Oauth-токен берется по инструкции на этой странице (вкладка api). Я намеренно не привожу тут ссылку для его получения, чтобы вы использовали только ссылку из официальной документации. Помните, что oauth-токен — это ключ к вашему облаку, распоряжайтесь им бережливо. Кроме того, можно использовать токен для сервисного аккаунта, ему можно дать только нужные права.

Итак, открываем Postman, и заполняем запрос:

Адрес post запроса https://tts.api.cloud.yandex.net/speech/v1/tts:synthesize, тип авторизации Bearer Token, вместо самого токена пишем конструкцию {{token}}.

Заполняем тело запроса:

Тип кодирования x-www-form-urlencoded.
Ключи:
text — {{text}}
lang — ru-RU
speed — 1
voice — oksana (список голосов доступен в документации)
emotion — good (список эмоций доступен в документации)
folderId — id каталога, который вы получили выше
format — mp3 (список форматов доступен в документации)

Ну и на вкладку pre-request script вставляем простой скрипт. Не забудьте вставить ваш oauth-токен.

const postRequest = {   url: 'https://iam.api.cloud.yandex.net/iam/v1/tokens?yandexPassportOauthToken=<ваш oauth-токен>',   method: 'POST', }; pm.sendRequest(postRequest, (error, response) => {   console.log(error ? error : response.json());   var tok = response.json();   console.log(tok['iamToken']);   pm.collectionVariables.set("token", tok['iamToken']); });  var text = "\ Это пример текста который надо озвучить. Для переноса строки пользуйтесь обратным слешем.\ ";  pm.collectionVariables.set("text", text); 

Ну вот собственно и все. Теперь если нажать на кнопку «Send» в нижнюю часть окна загрузится mp3 файл, который можно там же прослушать и сохранить.


ссылка на оригинал статьи https://habr.com/ru/post/661569/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *