Вчера понадобилось мне записать голос для голосового (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/
Добавить комментарий