Текст в речь (Text to speech)

Синтезатор речи локально или в облаке работает под windows, linux и OSX. Mp3 и Wav можно тоже проигрывать.

Текущий релиз
5.3.1
Разработчик
bluefox
Лицензия
MIT

Этот адаптер использует библиотеки Sentry для автоматического сообщения разработчикам об исключениях и ошибках в коде. Более подробную информацию, а также инструкции по отключению отправки сообщений об ошибках см. в документации Sentry-Plugin ! Система отчетности Sentry используется начиная с js-controller 3.0.

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

Конфигурация

Фактически поддерживаются следующие выходные данные:

  • Браузер — браузер воспроизведет текст внутри открытого окна.iobroker.vis Эта страница поддерживается практически всеми настольными браузерами и некоторыми мобильными браузерами.

  • Home24-MediaPlayer — текст будет отправлен и воспроизведен на устройстве Android с установленным Home24-MediaPlayer. Для этого будет использоваться встроенный в Android механизм преобразования текста в речь. Порт изменить нельзя, он должен быть установлен на 50000.

  • Home24 — медиаплеер и FTP-сервер — текст будет отправлен и воспроизведен на устройстве Android с установленным Home24 — медиаплеером. Для этого будет использоваться движок преобразования текста в речь от Google. Сгенерированный файл mp3 будет скопирован по FTP на устройство Android и воспроизведен с помощью Home24 — медиаплеера. Оба приложения должны иметь одинаковые домашние каталоги (например, корневой каталог «sd card»).

  • Система — воспроизведение текста будет осуществляться операционной системой, на которой работает адаптер ioBroker. Поддерживаются следующие ОС: Windows, Linux, Mac OSx.

  • Движок Windows — текст будет воспроизводиться в Windows, где работает адаптер sayIt. Для этого будет использоваться движок преобразования текста в речь Windows, который должен быть предварительно настроен пользователем. Инструкции по настройке можно найти здесь .

  • Sonos — воспроизведите текст на устройстве Sonos. Убедитесь, что веб-адаптер включен. Он необходим для того, чтобы SONOS мог читать сгенерированные файлы mp3.

  • Heos - воспроизведение текста на устройстве HEOS. Убедитесь, что веб-адаптер включен. Он необходим для того, чтобы HEOS мог читать сгенерированные файлы mp3.

  • Chromecast — воспроизведение текста на устройстве Chromecast.

  • MPD — воспроизведение текста в демоне музыкального проигрывателя. Используйте только HTTP для веб-адаптера, не используйте HTTPS.

Чтобы включить функцию преобразования текста в речь на Raspberry Pi или в системе Linux, однократно выполните следующую команду.sudo apt-get -y install mpg321 установить mpg321.

Воспроизведение файлов mp3/wav осуществляется путем ввода их имени в объект. (например)/vis.0/main/img/door-bell.mp3 )

Файл необходимо сначала загрузить.

Двигатели TTS

Онлайн:

  • Google: английский, немецкий, русский, итальянский, испанский, французский;
  • Яндекс: Русский. Для использования голосов Яндекса необходимо запросить ключ API здесь: https://tech.yandex.ru/speechkit/cloud/doc/dg/concepts/About-docpage/ . [Этот сервис будет отключен 1 января 2019 года и заменен на Yandex.cloud]. Для использования Yandex.cloud необходимо зарегистрироваться здесь: [ https://cloud.yandex.ru/ ], установить API SpeechKIT в облаке и получить токен авторизации и идентификатор папки, как описано в инструкциях к API.
  • FreeTTS: более 400 голосов на более чем 75 языках, предоставленных https://freetts.org . Язык выбирается не движком, а самим голосом, например.de-DE-KatjaNeural Для использования требуется ключ API со страницы с ценами . Бесплатный тарифный план добавляет к каждому тексту голосовое сообщение «сгенерировано с помощью freeTTS.org», поэтому его нельзя использовать для объявлений.
  • Облачные сервисы: Для использования облачных голосовых сервисов необходимо настроить и запустить соответствующие приложения.cloud адаптер или введите ключ приложения непосредственно в настройках
  • Amazon Web Services Polly: Для использования голосовых сервисов AWS Polly необходимо создать ключ доступа и секретный ключ здесь . Документацию Amazon можно найти здесь .

Офлайн:

  • PicoTTS (только для Linux): английский, немецкий, итальянский, испанский, французский; для работы PicoTTS необходимо установить следующие пакеты:libttspico-utils и отстой. Команда установки:sudo apt-get install libttspico-utils lame

  • Coqui TTS: английский, немецкий, испанский, французский, голландский, японский, китайский; инструкции по использованию см. в официальной документации.

Тестирование генерации текста

С помощью кнопкиTest text generation на вкладкеEngine Вы можете проверить, правильно ли настроен выбранный двигатель.

ПолеTest text Поле предварительно заполняется тестовым предложением на языке выбранного движка и может быть изменено по желанию. Если поле пустое, будет использовано то же предложение. Текст будет сгенерирован с учетом настроек диалогового окна, поэтому их не следует сохранять перед тестированием.

Текст будет только сгенерирован, но не воспроизведен, поэтому тест будет работать, даже если проигрыватель недоступен. Диалоговое окно отображает размер и продолжительность сгенерированного файла и пытается открыть его в новой вкладке браузера, чтобы вы могли его прослушать. Для этого браузер должен разрешать всплывающие окна для административной панели ioBroker.

Для одновременной проверки генерации и воспроизведения используйте кнопку.Test на вкладкеPlayer .

Облачные и Amazon Web Services: форматирование текста Polly

Вы можете форматировать текст с помощью языка разметки синтеза речи (Speech Synthesis Markup Language) .

Наиболее полезные функции:

  • <break time="3s"/> - сделать паузу на x секунд (максимум 10 секунд).
  • <emphasis> big </emphasis> - сделать акцент на каком-либо слове.
  • <prosody volume="+6dB" rate="90%">I am speaking this</prosody> - Регулировка параметров скорости и громкости.
  • <say-as interpret-as="digits">12345</say-as> - произносить каждую цифру отдельно.

Дополнительная информация .

Системная команда

Если у вас есть программа, которая может воспроизводить аудиофайлы локально или в другом месте, вы можете написать здесь эту команду. Например:

myCustomPlayer --option

Если выбран вариант «Системный вывод», тоsayit Адаптер выполнит следующую команду в локальной системе:

myCustomPlayer --option /opt/iobroker/node_modules/iobroker.sayit/say.mp3

Если имя файла должно находиться где-то посередине, можно использовать %s для указания места, где должно быть размещено имя файла:

myCustomPlayer --option "%s" > /dev/null

скажите, это сделаетmyCustomPlayer --option "/opt/iobroker/node_modules/iobroker.sayit/say.mp3" > /dev/null от него.

Использование

Адаптер SayIt нельзя использовать отдельно. Он должен управляться из JavaScript-адаптера или из компонента "vis" с помощью специального виджета. После создания экземпляра адаптера вы найдете следующие объекты:

  • sayit.N.tts.text Фраза для произнесения.
  • sayit.N.tts.volume : громкость, которая будет использоваться при воспроизведении фразы.
  • sayit.N.tts.playing : true, если текст воспроизводится, и false, если нет. Поддерживается только для режимов воспроизведения "Windows" и "System".
  • sayit.N.tts.cachetext Фраза, которую необходимо кэшировать, после чего её можно будет использовать без подключения к интернету. Например, вы можете вручную ввести сюда "Нет интернета", и если пинг до google.com окажется отрицательным, напишите "Нет интернета" в "tts.text", и это будет произнесено. Конечно, кэширование должно быть включено.

Состояниеtts.text Поддерживает расширенный синтаксис, поэтому язык/движок и громкость могут быть определены вместе с текстом. Используется для включения многоязычных движков преобразования текста в речь. Например, если адаптер имеет движокGoogle-english Это возможно с помощью фразы.de:Sag es принудительно использовать речевой движок Google-Deutsch.

Сru;75;Погода хорошая Мы можем принудительно включить русский язык и громкость на 75%.

Вы можете указать громкость объявления в процентах от текущей или заданной громкости (не от максимальной). Например, если команда такая:de;75;Gutes Wetter Если громкость объявления составляет 50%, объявление будет воспроизводиться с громкостью 38% от максимально возможной в 100%.

Также можно указать системную команду для воспроизведения файла mp3. Если оставить это поле пустым, будут использоваться настройки по умолчанию: windows -cmdmp3.exe , OSX -/usr/bin/afplay , linux -mpg321 илиomxplayer (рекомендуется).

Для установки omxplayer напишитеsudo apt-get install omxplayer или написатьsudo apt-get install mpg321 установить mpg321.

Примечание: Выбор опции "объявить" по умолчанию будет возможен только после запуска экземпляра.

СsendTo Вы можете передавать больше различных параметров, например:sonosDevice илиbrowserInstance :

sendTo('sayit.0', 'say', {
    text: 'Hello',
    sonosDevice: 'Wohnzimmer', // optional, if not defined, the device from configuration will be used
    engine: 'Google-de', // optional, if not defined, the device from configuration will be used
    type: 'sonos', // optional, if not defined, the device from configuration will be used
    volume: 20, // optional, if not defined, the device from configuration will be used
});

Приоритеты

Чтобы текст был произнесен немедленно, несмотря на наличие текста в очереди, у вас есть два варианта:

  • Вставьте "!" в качестве первого символа в текст, чтобы этот текст произносился сразу после текущего.
  • Запишите значение true в состояние "tts.clearQueue", и очередь будет очищена. После этого вы можете записать новый текст.tts.text Однако все тексты, находящиеся в очереди, удаляются.

Двигатели

Для двигателей возможны следующие значения:

Google

  • эн - английский
  • де - немецкий
  • pl - Polski
  • ру - Русский
  • uk - український
  • это - итальяно
  • es - Espaniol
  • fr - Français
  • nl - Nederlands
  • zh-CN - 简体中文
  • pt - Português

FreeTTS

  • freeTTS — голос, скорость и высота тона берутся из конфигурации экземпляра.

Язык является частью голосового сопровождения, поэтому существует только одно название движка. Голосовое сопровождение, например...de-DE-KatjaNeural В диалоговом окне настроек выбирается соответствующий параметр, и из сервиса считывается список всех доступных голосов. Запрос ограничен 10000 символами, поэтому более длинные тексты разбиваются на части и произносятся один за другим.

Яндекс

  • ru_YA:Яндекс - Русский
  • ru_YA_CLOUD:Яндекс Облако - Русский [API Yandex.Cloud генерирует файлы в формате OGG. Для воспроизведения файлов OGG в Linux необходимо установить mplayer и выбрать его в качестве системного проигрывателя]

Amazon Polly через облако

  • ru-RU_CLOUD_Female - Русский - Татьяна
  • ru-RU_CLOUD_Male - Русский - Максим
  • de-DE_CLOUD_Female - Deutsch - Марлен
  • de-DE_CLOUD_Male - Deutsch - Ганс
  • de-DE_CLOUD_Female_Vicki - Deutsch - Вики
  • de-DE_CLOUD_Male_Daniel - Deutsch - Даниэль
  • de-AT_CLOUD_Female_Hannah - Австрия - Ханна
  • en-US_CLOUD_Female - en-US - Female - Salli
  • en-US_CLOUD_Male - en-US - Male - Joey
  • da-DK_CLOUD_Female - da-DK - Женщина - Ная
  • da-DK_CLOUD_Male - da-DK - Мужской - Мадс
  • ru-AU_CLOUD_Female - ru-AU - Женщина - Николь
  • ru-AU_CLOUD_Male - ru-AU - Мужской - Рассел
  • ru-GB_CLOUD_Female_Amy - ru-GB - Женщина - Эми
  • en-GB_CLOUD_Male - en-GB - Мужчина - Брайан
  • ru-GB_CLOUD_Female_Emma - ru-GB - Женщина - Эмма
  • en-GB-WLS_CLOUD_Female - en-GB-WLS - Female - Gwyneth
  • en-GB-WLS_CLOUD_Male - en-GB-WLS - Male - Geraint
  • cy-GB_CLOUD_Female - cy-GB - Female - Gwyneth
  • cy-GB_CLOUD_Male - cy-GB - Male - Geraint
  • en-IN_CLOUD_Female - en-IN - Female - Raveena
  • en-US_CLOUD_Male_Chipmunk - en-US - Male - Chipmunk
  • en-US_CLOUD_Male_Eric - en-US - Male - Eric
  • en-US_CLOUD_Female_Ivy - en-US - Female - Ivy
  • en-US_CLOUD_Female_Jennifer - en-US - Female - Jennifer
  • ru-US_CLOUD_Male_Justin - ru-US - Мужчина - Джастин
  • en-US_CLOUD_Female_Kendra - en-US - Female - Kendra
  • en-US_CLOUD_Female_Kimberly - en-US - Female - Kimberly
  • es-ES_CLOUD_Female - es-ES - Женщина - Кончита
  • es-ES_CLOUD_Male - es-ES - Мужчина - Энрике
  • es-US_CLOUD_Female - es-US - Female - Penelope
  • es-US_CLOUD_Male - es-US - Male - Miguel
  • fr-CA_CLOUD_Female - fr-CA - Female - Chantal
  • fr-FR_CLOUD_Female - fr-FR - Female - Celine
  • fr-FR_CLOUD_Male - fr-FR - Male - Mathieu
  • is-IS_CLOUD_Female - is-IS - Female - Dora
  • is-IS_CLOUD_Male - is-IS - Male - Karl
  • it-IT_CLOUD_Female - it-IT - Female - Carla
  • it-IT_CLOUD_Male - it-IT - Male - Giorgio
  • nb-NO_CLOUD_Female - no-NO - Female - Liv
  • no-NO_CLOUD_Female - no-NO - Female - Ida
  • nl-NL_CLOUD_Female - nl-NL - Female - Lotte
  • nl-NL_CLOUD_Male - nl-NL - Male - Ruben
  • pl-PL_CLOUD_Female_Agnieszka - pl-PL - Female - Agnieszka
  • pl-PL_CLOUD_Male_Jacek - pl-PL - Мужской - Яцек
  • pl-PL_CLOUD_Female_Ewa - pl-PL - Female - Ewa
  • pl-PL_CLOUD_Male_Jan - pl-PL - Male - Jan
  • pl-PL_CLOUD_Female - pl-PL - Female - Maja
  • pt-BR_CLOUD_Female - pt-BR - Female - Vitoria
  • pt-BR_CLOUD_Female_Camila - pt-BR - Female - Camila
  • pt-BR_CLOUD_Male - pt-BR - Male - Ricardo
  • pt-PT_CLOUD_Male - pt-PT - Male - Cristiano
  • pt-PT_CLOUD_Female - pt-PT - Female - Ines
  • ro-RO_CLOUD_Female - ro-RO - Female - Carmen
  • sv-SE_CLOUD_Female - sv-SE - Female - Astrid
  • tr-TR_CLOUD_Female - tr-TR - Female - Filiz
  • pt-BR_CLOUD_Female_Camila - pt-BR - Female - Camila

Пико ТТС

  • en-US - Englisch US
  • en-GB - Englisch GB
  • de-DE - Deutsch
  • it-IT - Italiano
  • es-ES - Espaniol
  • fr-FR - Français

Коки TTS

  • Английский
  • немецкий
  • Испанский
  • Французский
  • Нидерландский
  • 日本

Amazon Polly Direct

  • ru-RU_AP_Female - Русский - Татьяна
  • ru-RU_AP_Male - Русский - Максим
  • de-DE_AP_Female - Deutsch - Марлен
  • de-DE_AP_Female_Vicki - Deutsch - Вики
  • de-DE_AP_Male - Deutsch - Ганс
  • en-US_AP_Female - en-US - Female - Salli
  • ru-US_AP_Male - ru-US - Мужчина - Джоуи
  • da-DK_AP_Female - da-DK - Женщина - Наджа
  • da-DK_AP_Male - da-DK - Мужской - Мадс
  • ru-AU_AP_Female - ru-AU - Женщина - Николь
  • ru-AU_AP_Male - ru-AU - Мужской - Рассел
  • ru-GB_AP_Female_Amy - ru-GB - Женщина - Эми
  • en-GB_AP_Male - en-GB - Мужчина - Брайан
  • ru-GB_AP_Female_Emma - ru-GB - Женщина - Эмма
  • en-GB-WLS_AP_Female - en-GB-WLS - Женщина - Гвинет
  • en-GB-WLS_AP_Male - en-GB-WLS - Male - Geraint
  • cy-GB_AP_Female - cy-GB - Female - Gwyneth
  • cy-GB_AP_Male - cy-GB - Male - Geraint
  • en-IN_AP_Female - en-IN - Женщина - Равина
  • ru-US_AP_Male_Chipmunk - ru-US - Самец - Бурундук
  • en-US_AP_Male_Eric - en-US - Male - Eric
  • en-US_AP_Female_Ivy - en-US - Female - Ivy
  • en-US_AP_Female_Jennifer - en-US - Female - Jennifer
  • ru-US_AP_Male_Justin - ru-US - Мужчина - Джастин
  • en-US_AP_Female_Kendra - en-US - Female - Kendra
  • en-US_AP_Female_Kimberly - en-US - Female - Kimberly
  • es-ES_AP_Female - es-ES - Женщина - Кончита
  • es-ES_AP_Male - es-ES - Мужчина - Энрике
  • es-US_AP_Female - es-US - Female - Penelope
  • es-US_AP_Male - es-US - Мужской - Мигель
  • fr-CA_AP_Female - fr-CA - Female - Chantal
  • fr-FR_AP_Female - fr-FR - Female - Celine
  • fr-FR_AP_Male - fr-FR - Male - Mathieu
  • is-IS_AP_Female - is-IS - Female - Dora
  • is-IS_AP_Male - is-IS - Male - Karl
  • it-IT_AP_Female - it-IT - Female - Carla
  • it-IT_AP_Male - it-IT - Male - Giorgio
  • nb-NO_AP_Female - nb-NO - Female - Liv
  • nl-NL_AP_Female - nl-NL - Female - Lotte
  • nl-NL_AP_Male - nl-NL - Male - Ruben
  • pl-PL_AP_Female_Agnieszka - pl-PL - Женщина - Агнешка
  • pl-PL_AP_Male_Jacek - pl-PL - Мужской - Яцек
  • pl-PL_AP_Female_Ewa - pl-PL - Female - Ewa
  • pl-PL_AP_Male_Jan - pl-PL - Male - Jan
  • pl-PL_AP_Female - pl-PL - Female - Maja
  • pt-BR_AP_Female - pt-BR - Female - Vitoria
  • pt-BR_AP_Male - pt-BR - Male - Ricardo
  • pt-PT_AP_Male - pt-PT - Male - Cristiano
  • pt-PT_AP_Female - pt-PT - Female - Ines
  • ro-RO_AP_Female - ro-RO - Female - Carmen
  • sv-SE_AP_Female - sv-SE - Женщина - Астрид
  • tr-TR_AP_Female - tr-TR - Female - Filiz
  • ko-KR_AP_Female - ko-KR - Женщина - Соён

Changelog

5.3.1 (2026-08-13)

  • (@GermanBluefox) Added the button "Test text generation" to the "Engine" tab, so the selected engine can be tested with an own text
  • (@GermanBluefox) Test generations do not overwrite the cached files anymore
  • (@GermanBluefox) Adapter requires node.js >= 22 and js-controller >= 6.0.11 now
  • (@GermanBluefox) Older changelog entries were moved to CHANGELOG_OLD.md
  • (@GermanBluefox) Updated the dependabot and auto-merge configuration

5.3.0 (2026-08-13)

  • (@GermanBluefox) Added freetts.org as a new TTS engine with more than 400 voices. An API key is required
  • (@GermanBluefox) The engine is selected in two steps now: first the provider and then the voice
  • (@GermanBluefox) The words of the Blockly block are translated into all 11 languages now
  • (@GermanBluefox) Blockly block migrated to TypeScript and the generated code is unchanged

5.2.4 (2026-08-07)

  • (@GermanBluefox) Corrected the upload of the announcement mp3 files and the location of the cache directory
  • (@GermanBluefox) Corrected the splitting of long texts for the Google engine
  • (@GermanBluefox) Corrected the detection of sonos devices in the configuration dialog
  • (@GermanBluefox) Cached files will be deleted again if the engine was changed
  • (@GermanBluefox) The queue does not block anymore if an error occurs by processing of a task
  • (@GermanBluefox) Texts with semicolons will not be interpreted as "language;volume;text" anymore
  • (@GermanBluefox) The local engines (PicoTTS, CoquiTTS) and the windows player are called without shell now
  • (@GermanBluefox) Corrected the default settings of a new instance

5.1.0 (2025-09-17)

  • (bluefox) Adapter was rewritten with TypeScript
  • (bluefox) Updated Polly voices list
  • (bluefox) Added an option to send sonos device as a parameter in sendTo command

5.0.0 (2024-07-16)

  • (mcm1957) Adapter requires admin v7 or newer now
  • (mcm1957) Adapter requires jas-controller 5 or newer now
  • (bluefox) Added possibility to play directly from states: sayit.0/tts.userfiles/gong.mp3

License

The MIT License (MIT)

Copyright (c) 2014-2026, bluefox dogafox@gmail.com

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.