Для написания скрипта синтеза речи (Text-to_Speech, TTS) в современных версиях Windows используем System.Speech.Synthesis.SpeechSynthesizer из .Net Framework в скрипте PowerShell, потому что используемый в Windows 7 Microsoft Speech Platform 11 не будет работать в Windows 8 и старше.

Компоненты синтеза речи System.Speech.Synthesis доступны бесплатно в составе .NET, эта библиотека обычно уже установлена на компьютере.

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

Например, если запрограммировать голосовое уведомление о входящем электронном письме, то уведомление будет более информативным, если будет содержать имя отправителя и тему письма. Пример использования – озвучивание входящих смс сообщений, когда скрипт зачитывает содержание входящего смс, считанного программой nhsms.

Статья рассматривает написание скрипта на PowerShell для формирования голосового сообщения на русском и английском языках, а также запуск скрипта из командной строки и из bat файла.

PowerShell скрипт синтеза речи

Этот сценарий PowerShell работает в Windows 8 и Windows 10, он создаёт объект SpeechSynthesizer и с его помощью выбирая соответствующий голос, проговаривает русский или английский текст:

Add-Type -AssemblyName System.speech
$speech = New-Object System.Speech.Synthesis.SpeechSynthesizer

$speech.SelectVoice('Microsoft Irina Desktop')
$speech.speak('Здравствуйте! Меня зовут Ирина.')

$speech.SelectVoice('Microsoft Zira Desktop')
$speech.speak('Hello! My name is Zira.')

В Windows 10 Рус предустановлены два голоса:

  • Microsoft Irina Desktop – Ирина, русский женский голос, используется по умолчанию (необязательно его выбирать, если произносится русский текст). Если подсунуть Ирине английский текст, она произнесёт их как латиницу.
  • Microsoft Zira Desktop – Zira, английский женский. Необходимо выбирать его вызовом SelectVoice. Zira не говорит по-русски совсем – если дать ей русский текст, не будет никакого звука.

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

Запуск PowerShell скрипта вручную

Для воспроизведения голосового сообщения необходимо сохранить текст сценария в файле с расширением .ps1, например, tts_test.ps1, а затем выполнить его, например, из проводника Windows контекстной командой Выполнить с помощью PowerShell.

Запуск PowerShell скрипта из командной строки или bat файла

Гораздо интереснее запускать этот скрипт из командного файла. Для этого необходимо задать обход политик выполнения параметром -executionpolicy:

@echo off
powershell -executionpolicy bypass -file tts_test.ps1

Если же попытаться запустить, просто указав файл:

powershell -file tts_test.ps1

то скрипт не будет выполнен из-за нарушения политики запуска с таким сообщение об ошибке:

Невозможно загрузить файл C:\Users\user\Downloads\0201\tts_test.ps1, так как вы
полнение сценариев отключено в этой системе. Для получения дополнительных сведе
ний см. about_Execution_Policies по адресу http://go.microsoft.com/fwlink/?Link
ID=135170.
+ CategoryInfo : Ошибка безопасности: (:) [], ParentContainsError
RecordException
+ FullyQualifiedErrorId : UnauthorizedAccess

Поэтому при появлении этой ошибки используйте -executionpolicy bypass.

Другие примеры синтезирования речи

Этот PowerShell скрипт зачитывает текст, переданный через командную строку:

if ( $args.count -eq 0 ) {
    Write-Host 'No text'
    exit
}

$text = $args[ 0 ]
for ( $i = 1; $i -lt $args.count; $i++ ) {
    $text = $text + ' ' + $args[ $i ]
}

#Write-Host $text

Add-Type -AssemblyName System.speech
$speech = New-Object System.Speech.Synthesis.SpeechSynthesizer
$speech.SelectVoice('Microsoft Irina Desktop')
$speech.speak($text)

В bat файле можно передать в скрипт любую строку:

@echo off
powershell -executionpolicy bypass -file tts.ps1 %username%, добро пожаловать!

или

@echo off
powershell -executionpolicy bypass -file tts.ps1 Резервное копирование выполнено успешно!

Демонстрация bat файла синтеза речи

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

Все описанные PowerShell и bat файлы синтеза речи доступны для скачивания с
Яндекс.Диска.

Также можно скачать все скрипты и bat файлы в одной папке Яндекс.Диска

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

Класс SpeechSynthesizer

Синтез речи в Windows 8 и старше
Метки:        

Синтез речи в Windows 8 и старше: 3 комментария

    • 12.05.2022 в 04:35
      Постоянная ссылка

      Добрый день, у SpeechSynthesizer есть такое свойство Rate. Его можно задать в PowerShell скрипте, который вызывается из bat.

      $speech.SelectVoice('Microsoft Irina Desktop')
      $speech.rate=2
      $speech.speak('Здравствуйте! Меня зовут Ирина.')
      Ответить
  • 24.03.2022 в 10:16
    Постоянная ссылка

    Привет,

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

    Инструмент копирует выбранные элементы из раздела «HKLM\SOFTWARE\Microsoft\Speech_OneCore\Voices\Tokens» в «HKLM\SOFTWARE\Microsoft\Speech\Voices\Tokens».

    Если вам интересно: https://www.dipisoft.com/file/TTSVoicePatcher.zip (бесплатно, фр./англ.)

    Из-за манипуляций с ключами в HKLM для запуска инструмента требуются права администратора.

    С уважением.

    Ответить

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

Ваш адрес email не будет опубликован.