Pull to refresh

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

Reading time3 min
Views3.6K

Вчера понадобилось мне записать голос для голосового (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 файл, который можно там же прослушать и сохранить.

Tags:
Hubs:
+3
Comments3

Articles

Change theme settings