привел в рабочее состояние text2speech
Как оказалось, на сегодняшний момент Yandex полностью поменял API по сравнению с тем, под который написан плагин, по этому пришлось переписать немножко код (я качал и ковырял версию 0.0.4 с гитхаба).
Для того что-бы получить доступ к фунциям Yandex SpeechKit пришлось:
- зарегистрировать на себя облако создав платежный аккаунт,
- получить IAM-токен
- создать каталог в облаке (и запомнить его ID - он нам далее пригодится для синтеза звука)
- в каталоге создать - Сервисный аккаунт
- в сервисном аккаунте создать API-ключ - и запомнить его - он нам далее пригодится для синтеза звука.
Итого: по результатам регистрации на Yandex должен быть API-ключ и ID каталога.
Далее ковырял установленный плагин, заранее прошу прощения за корявый код, т.к. таких слов как js-node и CURL до текущей ситуации я не знал.
Ковырял при помощи описания API от Yandex https://cloud.yandex.ru/docs/speechkit/tts/request + гуглил по синтаксису и функциям языков.
По большому счету надо переписать в плагине одну библиотеку из модуля "yandex-speech" для этого идем в: /var/lib/intrahouse-c/plugins/text2speech/node_modules/yandex-speech/lib
там есть файл: YandexTTS.js
Содержимое YandexTTS.js после моего ковыряния:
'use strict';
var request = require('request');
var fs = require('fs');
var yandex_tts_url = 'https://tts.api.cloud.yandex.net/speech/v1/tts:synthesize';
var YandexTTS = function (options, callback) {
var headers = {'Authorization': 'Api-Key ' + options['developer_key']};
var dataString = 'text='+ options['text'] +
'&lang='+ options['lang'] +
'&voice='+ options['speaker'] +
'&emotion='+ options['emotions'] +
// '&speed=' + options['speed'] + '';
'&speed=0.9' +
// '&folderId=' + options['folder_id'] + '';
'&folderId=b1g92u63tba34rg4c8sr';
var request_options = {
url: yandex_tts_url,
method: 'POST',
headers: headers,
body: dataString
};
var file = fs.createWriteStream(options['file']);
file.on('finish', callback);
request(request_options).pipe(file);
};
module.exports = YandexTTS;
Если кто-то будет пользоваться исправленным кодом, в коде надо заменить слово b1****************sr на ранее полученный ID каталога и в параметрах плагина надо в поле токен прописать ранее полученный API-ключ и после этого перезапустить плагин.
В параметры плагина text2speech, пытался добавить элементы: folderId и speed - но что-то у меня не получилось, - параметры в интерфейсе появились, данные там сохранялись, но вызвать их у меня не получилось.
Далее, как выяснилось, в новом API SpeechKit в качестве ответа выдает файл в формате ogg (по умолчанию), или в RAW (надо дополнительно выбирать при передаче параметров) - который потом придется преобразовывать в какой-то другой формат. Сразу в формате wav SpeechKit не синтезирует. Поэтому пришлось доустановить в линуксе mplayer, т.к. тот что был у меня установлен по умолчанию файлы ogg не проигрывал.
При вызове информатора, в тексте который необходимо озвучить можно расставлять ударения в словах вставляя перед ударной гласной 3 символа: %2B согласно документации Yandex вообще-то надо ставить символ "+" но у меня как-то не срослось с урл-кодированием передаваемого текста, и поэтому вместо "+" ставлю %2B
В целом на текущий момент синтез звука в IH работает.
И еще, изначально в text2speech не было голоса alena, - как по мне - так это самый приятный голос из синтезируемых. Его можно добавить поправив файл /var/lib/intrahouse-c/plugins/text2speech/text2speech.json добавив следующий код в параметре yandex_speaker:
{
"id": "alena",
"name": "Alena"
},
и после перезапуска плагина можно будет выбрать и такой голос.