Для написания скрипта синтеза речи (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 файлы в одной папке Яндекс.Диска
привет! А как скорость ему сетнуть!.bat files
Добрый день, у SpeechSynthesizer есть такое свойство Rate. Его можно задать в PowerShell скрипте, который вызывается из bat.
Привет,
Я разработал небольшой инструмент, который позволяет исправлять установленные голоса, чтобы сделать их доступными для механизма преобразования текста в речь .NET.
Инструмент копирует выбранные элементы из раздела «HKLM\SOFTWARE\Microsoft\Speech_OneCore\Voices\Tokens» в «HKLM\SOFTWARE\Microsoft\Speech\Voices\Tokens».
Если вам интересно: https://www.dipisoft.com/file/TTSVoicePatcher.zip (бесплатно, фр./англ.)
Из-за манипуляций с ключами в HKLM для запуска инструмента требуются права администратора.
С уважением.