Эта статья рассказывает, как реализовать функции синтеза речи в скриптах JScript/VBScript и в командных файлах bat/cmd.

Функция синтез речи представляет собой преобразование текста (строки или текстового файла) в звук, дословно Text-To-Speech, TTS. Для формирования звука речи используют готовые компоненты или программы. Эта статья рассказывает о том, как установить, настроить и запрограммировать синтез речи с использованием Microsoft Speech Platform.

Преимущество TTS, по сравнению с обычным MessageBox, в том, что пользователь услышит и поймёт сообщение, даже если он отвернулся от монитора или отошёл от компьютера, то есть голосовое сообщение не требует, чтобы пользователь подходил к компьютер и прочитал текст сообщения. Особенно удобно применение TTS для напоминаний.

В статье:

  • Скачивание и установка компонентов
  • Выбор голоса и проговаривание статического текста
  • Проговаривание времени и динамического текста
  • Совместимые версии Windows

Возможности TTS

Функции Text-to-Speech, TTS позволяют создать голосовой интерфейс пользователя из обычного текста, статического или формируемого динамически.

Скачивание и установка компонентов TTS

Чтобы синтезировать речь из текста TTS, с поддержкой русского языка, не используя платное ПО, можно использовать Microsoft Speech Platform, это бесплатный компонент с поддержкой многих языков (на сегодня поддерживается 26 языков, включая русский), он позволяет не только синтезировать речь из текста, но и анализировать речь для построения голосового управления.

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

Нам понадобится скачать и установить:

Собственно компонент Speech Platform – файл SpeechPlatformRuntime.msi, можно скачать из Microsoft Speech Platform Runtime 11 (для 32-х и 64-хбитной платформы это разные файлы!) или по прямой ссылке (x64) https://yadi.sk/d/FBI8vqNwZbPaR

Русский голос Елена – файл MSSpeech_TTS_ru-RU_Elena.msi, можно скачать из Redistributable Language Packs 11 или по прямой ссылке https://yadi.sk/d/Y-axw4ZnZbPoS

Установку компонентов можно проверить следующим скриптом (JScript). Скрипт использует интерфейс SpVoice.

var speech = WScript.CreateObject("SPEECH.SpVoice");
if ( speech == null )
    WScript.Echo("Speech not installed. Exit");
var voices = speech.GetVoices();
if ( voices.Count == 0 ) {
    WScript.Echo("Voices not installed. Exit.");
    WScript.Quit(0);
}

WScript.Echo("Voices available: " + voices.Count);
for ( var i = 0; i < voices.Count; ++i)
    WScript.Echo(voices.Item(i).GetDescription());
WScript.Echo("Current Voice: " + speech.Voice.GetDescription());

Если на компьютере установлен один голос, вывод должен быть такой:

Voices available: 1
Microsoft Server Speech Text to Speech Voice (ru-RU, Elena)
Current Voice: Microsoft Server Speech Text to Speech Voice (ru-RU, Elena)

Или, если на компьютере установлено несколько голосов, например, два:

Voices available: 2
Microsoft Server Speech Text to Speech Voice (ru-RU, Elena)
Microsoft Server Speech Text to Speech Voice (en-US, Helen)
Current Voice: Microsoft Server Speech Text to Speech Voice (ru-RU, Elena)

Произнесение статического текста в JScript

Теперь синтез речи выполняется в пару строк скрипта say-hello.js:

var speech = WScript.CreateObject("SPEECH.SpVoice");
speech.Speak("Привет!");

Чтобы получить тот же «Привет!» в командном файле, выполняем JS скрипт через cscript или wscript:

@echo off
cscript.exe //nologo say-hello.js

Проговаривание динамически формируемого текста в JScript

Следующий скрипт проговаривает часы и минуиы текущего времени и формирует из них строку для произнесения:

var speech = WScript.CreateObject("SPEECH.SpVoice");
var now = new Date();
speech.Speak(now.getHours() + ":" + now.getMinutes());

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

Интереснее, конечно, сделать оповещение о событиях, передавая текст сообщения в скрипт JS параметром командной строки:

var speech = WScript.CreateObject("SPEECH.SpVoice");
var text = "";
for ( var i = 0; i < WScript.Arguments.length; ++i ) {
    if ( text == "" )
        text += " ";
    text += WScript.Arguments(i);
}
speech.Speak(text);

В bat файле speech-test.cmd просто вызываем speech.js с текстом в параметрах:

wscript.exe speech.js Входящее сообщение

Аналогичные скрипты для проговаривания текста можно написать и на VBScript; он будет использовать тот же компонент и может быть даже записан в одну строку:

CreateObject("Speech.SpVoice").Speak"Здравствуйте!"

Сохраните эту строку в файл .vbs и выполните этот файл – всё очень просто! Этот же файл позволяет сделать автоматическое голосовое приветствие при каждом включении компьютера – если скопировать этот скрипт в папку Автозагрузка (или создать ярлык)!

Пример реализации TTS с проговариванием времени

Ещё один простой пример – следующий скрипт проговаривает, сколько сейчас часов. Если создать расписание и запускать скрипт в начале каждого часа, то получится удобное напоминание о времени (полезно для тех, кто любит засиживаться за компьютером :))

var t = new Date();

var hours_text = "часов";
if ( t.getHours() == 1 || t.getHours() == 21 )
    hours_text = " час ";
else if ( Math.floor(t.getHours() / 10) != 1 &&
    t.getHours() % 10 >= 2 && 
    t.getHours() % 10 <= 4 )
    hours_text = " часа ";

var speech = WScript.CreateObject("SPEECH.SpVoice");
speech.Speak(t.getHours() + " " + hours_text);

Скрипт учитывает особенности русского языка при формировании текста, т.е. говорит «10 часов», «11 часов» и т.д., но «21 час», «22 часа» и т.д.

Совместимость

Microsoft Speech Platform 11 поддерживается в Windows 7, Windows Server 2008, Windows Server 2008 R2, Windows Vista, поэтому описанные скрипты будут работать в этих версиях Windows.

Важно! В более поздних версиях (Windows 8 и старше) этот скрипт не заработает, а потребуется Скрипт синтеза речи для Windows 8 и старше

Файлы для загрузки

Все описанные файлы скриптов JS/VBS и командных файлов CMD доступны для скачивания с Яндекс.Диска по ссылке Text-To-Speech-Windows7.

Кроме этого, в папке есть скрипты для тестирования установленных компонентов, для произнесения времени в часах и минутах.

А также Все скрипты и bat файлы в одной папке Яндекс.Диска

Узнать больше

Объект SpVoice предоставляет через свой интерфейс SpVoice Interface (SAPI 5.3) дополнительные возможности:

Синтез речи в скрипте и bat файле
Метки:             

9 мыслей о “Синтез речи в скрипте и bat файле

  • 08.07.2018 в 21:21
    Постоянная ссылка

    А как можно реализовать синтез в Bat файле? В командной строке, а не через VBScript?

    Ответ
    • 09.07.2018 в 11:41
      Постоянная ссылка

      В командной строке или bat файле через запуск скрипта:

      wscript.exe speech.js Входящее сообщение

      или

      cscript.exe speech.js Входящее сообщение
      Ответ
  • 06.02.2015 в 22:59
    Постоянная ссылка

    Запуск первого скрипта на определение движков вытал только 1 поддерживаемый модуль( как добавить алену туда?

    Ответ
      • 09.02.2015 в 19:46
        Постоянная ссылка

        Пришлось использовать другой вариант: запуск командной строки balabolka console из vbs скрипта в скрытом режиме. Просто 2 файла создавать приходится, немного неудобно, зато работает=)

        Ответ
        • 09.02.2015 в 20:20
          Постоянная ссылка

          Спасибо, полезная информация. Балаболка — бесплатное решение? И чем, кстати, Алёна лучше Елены?

          Ответ
          • 06.03.2015 в 23:47
            Постоянная ссылка

            Да, балаболка полностью в открытом доступе и доступна для всех, давно пользуюсь, а русский голосовой движок лучший на данный момент, который мне удалось найти, это IVONA Tatyana voice, недано поставил, с предыдущими не сравнить, еще чуть-чуть и от настоящих голосов я думаю, не отличить будет синтезаторы эти)

  • 06.02.2015 в 22:32
    Постоянная ссылка

    Спасибо за Ваш комментарий!
    Что касается возможностей интерфейса SpVoice. В статье есть ссылка на описание, дублирую на всякий случай: https://msdn.microsoft.com/en-us/library/ms723602%28v=vs.85%29.aspx
    Там есть свойство Voice https://msdn.microsoft.com/en-us/library/ms723614%28v=vs.85%29.aspx с примером на Visual Basic, как выбрать голос.
    Но, скорее всего, Speech Platform 11 будет поддерживать только «свои» голоса из Language Pack 11… Т.е. активировать Алену удастся, только если она будет перечислена в списке доступных голосов (метода GetVoices).

    Ответ
  • 06.02.2015 в 19:28
    Постоянная ссылка

    Огромное спасибо Вам!!! Задался вот вопросом, как в vbs скрипте использовать русский голос? Уже весь интернет облазил в поисках. И вот, наконец то нашел! Оказалось все проще, скрипт уместился в 1 строчку). Теперь только 1 вопрос, как сменить стандартный голос с Елены например, на Алену?
    вот что только удалось найти:

    .Pause = Поставить на паузу
    .resume = Возобновить после паузы
    .Rate = Скорость воспроизведения. Чем больше число, тем выше скорость
    .Voice = Если у вас установлено несколько голосов, можно задать нужный
    .Volume = Громкость
    .WaitUntilDone = Дождаться полной загрузки системы (пока загрузятся все сервисы, например).
    Так, вот как в параметре .voice изменить его? P.S. еще раз спасибо за данную статью!

    Ответ

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *