Плагин TextToSpeech



  • Добрый день,

    мы подготовили плагин TextToSpeech и добавили в него сервис Yandex TTS, далее нам стало известно, что Yandex TTS реорганизовывается и войдет в состав Яндекс.Облако. Соответственно встал вопрос с получением токенов и работоспособности данного сервиса в плагине. В целом мы готовы опубликовать плагин официально и подготовить документацию.



  • @sergeyygr:

    @thunder_d:

    Не вещает ни туда, ни сюда , может не поддерживает на винде?

    Может быть! У cherry на винде я так понимаю функциональность не полная.

    Добрый день, к сожаление данный плагин работает пока на linux семействах.



  • Добрый день, @sergeyygr

    опишите пожалуйста где Вы получили ключ для Yandex TTS 😉



  • @dev:

    Добрый день, @sergeyygr

    опишите пожалуйста где Вы получили ключ для Yandex TTS 😉

    На самом деле ключа для TTS нет у Яндекса, да и пока он не нужен. Тестирую голосовой терминал (mdmTerminal2) - переключил на Яндекс и он работает без какого-либо токена, причем и TTS, и STT!



  • @Alex_Jet:

    @dev:

    Добрый день, @sergeyygr

    опишите пожалуйста где Вы получили ключ для Yandex TTS 😉

    На самом деле ключа для TTS нет у Яндекса, да и пока он не нужен. Тестирую голосовой терминал (mdmTerminal2) - переключил на Яндекс и он работает без какого-либо токена, причем и TTS, и STT!

    Добрый день, Yandex с начала года перестал бесплатно раздавать токены их можно только купить. Бесплатные сервисы пока активны и есть лазейки и способы генерации токенов для старых сервисов TTS и STT, но все это временно.



  • @dev:

    Добрый день, @sergeyygr

    опишите пожалуйста где Вы получили ключ для Yandex TTS 😉

    Этот ключ (SpeechKey) я получил у Яндекса 3 года назад. Действительно, сейчас на их сайте сервиса с именем speech key я не нашёл.(((



  • @sergeyygr:

    @dev:

    Добрый день, @sergeyygr

    опишите пожалуйста где Вы получили ключ для Yandex TTS 😉

    Этот ключ (SpeechKey) я получил у Яндекса 3 года назад. Действительно, сейчас на их сайте сервиса с именем speech key я не нашёл.(((

    Наврал с названием сервиса 8-) . Не SpeechKey, а SpeechKit Cloud



  • Добрый день, предоставьте лог из отладчика



  • @Dimich-SDU:

    @dev:

    Добрый день, предоставьте лог из отладчика

    Народ, ну подскажите пожалуйста, что не так, в чем может быть причина??? Сам скрипт создан на основе блок схемы, параллельно с Text2Speech настроил email для проверки работоспособности, вот лог отладчика скрипта:

    07.04 00:45:46.188 Trigger LAMP_1_2

    07.04 00:45:46.188 Started

    07.04 00:45:46.189 do LAMP_1_1 on

    07.04 00:45:46.191 info: text2speech: запущен

    07.04 00:45:46.197 info: email: Запущен

    07.04 00:45:46.200 Stopped

    07.04 00:47:12.530 Trigger LAMP_1_2

    07.04 00:47:12.531 Started

    07.04 00:47:12.532 do LAMP_1_1 off

    07.04 00:47:12.534 info: text2speech: выключен

    07.04 00:47:12.540 info: email: Выключен

    07.04 00:47:12.543 Stopped

    email отрабатывает на отлично, а со звуком, просто легкий щелчок и всё.

    Еще есть такая странность (но возможно так и должно быть), при просмотре лога самого плагина, у email есть лог, а в плагине Text2Speech с логом полная тишина. Если в блок схеме скрипта в качестве команды выбрать не "Информирование" а "Команда плагина", то в логе отладчика самого плагина, появляется информация о работе плагина, но в этом случае нет даже легкого щелчка в динамиках как в случае с "Информированием".

    А Вы что хотите от этого плагина?

    У меня он только как средство информирования. В сценарии выглядит так: this.info("text2speech","OWNER",+dt.getHours()+":"+dt.getMinutes()+":"); - это произношение текущего времени. А Вы задумали голосом управлять устройствами? Тогда Вам сюда: https://frm.intrahouse.ru/viewtopic.php?f=18&t=5494



  • @Dimich-SDU:

    @sergeyygr:

    @Dimich-SDU:

    Народ, ну подскажите пожалуйста, что не так, в чем может быть причина??? Сам скрипт создан на основе блок схемы, параллельно с Text2Speech настроил email для проверки работоспособности, вот лог отладчика скрипта:

    07.04 00:45:46.188 Trigger LAMP_1_2

    07.04 00:45:46.188 Started

    07.04 00:45:46.189 do LAMP_1_1 on

    07.04 00:45:46.191 info: text2speech: запущен

    07.04 00:45:46.197 info: email: Запущен

    07.04 00:45:46.200 Stopped

    07.04 00:47:12.530 Trigger LAMP_1_2

    07.04 00:47:12.531 Started

    07.04 00:47:12.532 do LAMP_1_1 off

    07.04 00:47:12.534 info: text2speech: выключен

    07.04 00:47:12.540 info: email: Выключен

    07.04 00:47:12.543 Stopped

    email отрабатывает на отлично, а со звуком, просто легкий щелчок и всё.

    Еще есть такая странность (но возможно так и должно быть), при просмотре лога самого плагина, у email есть лог, а в плагине Text2Speech с логом полная тишина. Если в блок схеме скрипта в качестве команды выбрать не "Информирование" а "Команда плагина", то в логе отладчика самого плагина, появляется информация о работе плагина, но в этом случае нет даже легкого щелчка в динамиках как в случае с "Информированием".

    А Вы что хотите от этого плагина?

    У меня он только как средство информирования. В сценарии выглядит так: this.info("text2speech","OWNER",+dt.getHours()+":"+dt.getMinutes()+":"); - это произношение текущего времени. А Вы задумали голосом управлять устройствами? Тогда Вам сюда: https://frm.intrahouse.ru/viewtopic.php?f=18&t=5494

    Я конечно понимаю разницу между управлением и озвучиванием событий. Этот плагин для озвучки, а приведенный мною сценарий, он так сказать тестовый, чтоб запустить плагин и понять его работу и потом разобравшись (запустив) его, буду пытаться применить в реальной потребности… Вот и пытаюсь разобраться, так как параллельные события (команды) отрабатываются, а звук не работает.

    Добрый день, давайте проверим, что у Вас все нормально при воспроизведение звука через плагин:

    1. Выберите плагин TextToSpeech

    2. Откройте нижнюю панель плагина

    3. Перейдите в список каналов

    4. Нажмите кнопку с тремя полосками

    5. Выберите пункт "Проверить аудио"

    6. Вы должны услышать голосовое приветствие "Интрахаус"
    Снимок экрана от 2019-04-08 09-56-26.png



  • @Dimich-SDU:

    @dev:

    @Dimich-SDU:

    Я конечно понимаю разницу между управлением и озвучиванием событий. Этот плагин для озвучки, а приведенный мною сценарий, он так сказать тестовый, чтоб запустить плагин и понять его работу и потом разобравшись (запустив) его, буду пытаться применить в реальной потребности… Вот и пытаюсь разобраться, так как параллельные события (команды) отрабатываются, а звук не работает.

    Добрый день, давайте проверим, что у Вас все нормально при воспроизведение звука через плагин:

    1. Выберите плагин TextToSpeech

    2. Откройте нижнюю панель плагина

    3. Перейдите в список каналов

    4. Нажмите кнопку с тремя полосками

    5. Выберите пункт "Проверить аудио"

    6. Вы должны услышать голосовое приветствие "Интрахаус"

    Да, это работает.

    Добрый день, это хорошо, значит проблема с токеном, попробуйте токен от сюда:

    https://webasr.yandex.net/ttsdemo.html
    
    
    


  • @Dimich-SDU:

    @dev:

    @Dimich-SDU:

    Да, это работает.

    Добрый день, это хорошо, значит проблема с токеном, попробуйте токен от сюда:

    > > https://webasr.yandex.net/ttsdemo.html
    > > 
    > > 
    

    Ок, сейчас с работы доеду до дома и попробую.

    А что я должен буду услышать? То что будет вписано на этой странице в окне тест или то что я пропишу в своем сценарии?

    Добрый день, вы должны проверить через сценарий



  • @Dimich-SDU:

    @dev:

    @Dimich-SDU:

    Ок, сейчас с работы доеду до дома и попробую.

    А что я должен буду услышать? То что будет вписано на этой странице в окне тест или то что я пропишу в своем сценарии?

    Добрый день, вы должны проверить через сценарий

    С токеном из ссылки работает. Спасибо большое за подсказку. И если я правильно понимаю, этот токен не будет работоспособен постоянно, он типа тестовый (временный).

    Выходит проблема в моем токене. Как получить, правильный я не пойму, там на Яндекс Облаке такие джунгли в инструкциях, ничего не понятно, какая последовательность действий, куда вводить данные, которые они указывают в инструкциях, взрыв мозга сплошной.

    Писал в тех.поддержку, они только посочувствовали, согласились, что инструкции и последовательность действий по получению токенов действительно очень сложны, обнадежили, что их инженеры работают над упрощением возможности получения токенов… Сразу полегчало...

    Подскажите еще пожалуйста, реальный (правильный) токен должен выглядеть также как тестовый (последовательность символов, потом тире, опять символы, тире, символы...)? Или это может быть абсолютно любой набор и просто символов без тире?

    Добрый день, в Яндексе происходит миграция сервиса и пока до сих пор не ясно, как и что работает из за отсутствия корректной документации. Кто то получил токены ранее и они полноценно функционируют. Можно попробовать автоматически забирать токен с тестовой страницы 😉



  • Думаю вывести звук через Яндекс.Станцию, может у кого-то уже получилось ?



  • @fanagor, нужно api чтобы, наверное, через Яндекс-облако передать нужные данные. Вообще мне сам девайс от Яндекс понравился (неплохая аппаратная начинка и звук), но вот с софтом от Яндекс он для умного дома не слишком приспособлен...не знаю как сейчас, но раньше чтобы сделать навыки надо было постараться.
    Мне кажется, что более продуктивно будет хакнуть одноплатник Яндекс-станции и залить туда debian, на который накатить тот же mdmTerminal2. Более подробно о нем писал тут.
    Мне нравятся "легко программируемые" возможности такого голосового ассистента (сценарий iH и железка с mdmTerminal2). Плохо одно - нет функционально законченного устройства, на которое можно установить mdmTerminal2. В частности мне нужна железка (одноплатник с Eth, массив микрофонов, RGB-индикация, усилитель на борту с клеммами для подключения динамиков и внешним, либо POE-питанием) с установкой в потолок! - хочу спроектировать, но времени совсем нет для этого...



  • При обращении из сценария типа this.info("text2speech","admin",'Свет прихожая включен'); правильно понимаю, что в отладчике плагина должно что-то происходить ? У меня он молчит. В отладчике пусто. Тестовая фраза также не произносится. Где смотреть, кто подскажет ?



  • @fanagor Добрый день, а токен у вас есть ?
    Также проверьте что у вас установлены в системе один из следующих плееров:
    mplayer afplay play aplay



  • @dev токен есть. Плеер mplayer не поставился. "afplay play aplay" не нашел таких. VLC не подходит ? Не говорит, ну никак. Нет тестовой фразы. Может специфический кодек какой требуется для плагина ?



  • У кого сейчас работает text2speech?
    И токен который вводится в параметрах плагина, - это IAM-токен ?



  • привел в рабочее состояние 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"
            },
    

    и после перезапуска плагина можно будет выбрать и такой голос.


Log in to reply