Как заставить компьютер говорить: VBScript и синтез речи в Windows

Содержание
- Краткая история Visual Basic и VBScript
- Одноразовые VBS-скрипты — быстрый старт
- Скрипт «Text to Speech» с вводом текста
- Скрипт приветствия на основе времени суток
- Скрипт, который называет текущее время
- Автозапуск приветствия при старте Windows
- Настройки голоса: громкость, скорость, выбор голоса
- Отладка и типичные ошибки
- Безопасность, совместимость и ограничения
- Альтернативы: PowerShell, сторонние движки TTS, планировщик задач
- Руководства/чек-листы для пользователей и администраторов
- Краткий глоссарий и вывод
Краткая история Visual Basic и VBScript
VBScript (Visual Basic Scripting Edition) появился в 1988 году в ранних формах и в дальнейшей эволюции был официально размещён Microsoft в 1996 году как лёгкий скриптовый язык для автоматизации в Windows. VBScript использует COM (Component Object Model), что позволяет работать с компонентами операционной системы — в том числе с SAPI (Speech API), который и отвечает за синтез речи в Windows.
Важно: VBScript присутствовал в поставках Windows начиная с эпохи Windows 98 и встречается в большинстве классических версий Windows. На современных системах (Windows 10/11) механизм синтеза речи SAPI по-прежнему доступен, но поведение системы и политики безопасности могли измениться — см. раздел «Безопасность и совместимость».
Одноразовые VBS-скрипты — быстрый старт
Что это: небольшой .vbs-файл, который при двойном щелчке запускает фразу голосом системы.
Основные шаги:
- Откройте Блокнот (Notepad).
- Вставьте следующий код (пример исправлен для корректного синтаксиса):
' geek-test.vbs — простой пример синтеза речи
Dim speechobject
Set speechobject = CreateObject("SAPI.SpVoice")
speechobject.Speak "The geeks shall inherit the earth"- Сохраните файл с расширением .vbs, например: Geek test.vbs.
- Дважды щёлкните файл в Проводнике — ваш ПК произнесёт заданную фразу.
Заметка: чтобы изменить фразу, просто замените строку в кавычках.

Скрипт «Text to Speech» — ввод текста через диалог
Что это: скрипт, который показывает диалоговое окно для ввода произносимого текста.
Код:
' text-to-speech.vbs — ввод текста через InputBox
Dim message, sapi
message = InputBox("What shall I say, your Geekness?", "I speak for you.")
If message <> "" Then
Set sapi = CreateObject("SAPI.SpVoice")
sapi.Speak message
End IfПошагово:
- Сохраните как Text to Speech.vbs.
- Двойной щелчок откроет окно с заголовком “I speak for you.” и приглашением “What shall I say, your Geekness?”.
- Введите текст и нажмите OK — компьютер прочитает его вслух.
Совет по локализации: замените тексты в InputBox на удобные русские фразы, например: “Что мне произнести?” и заголовок окна на “Голосовой ввод”.

Приветствие по времени суток
Задача: скрипт определяет текущее время и выдаёт подходящее приветствие (утро/день/вечер).
Код (корректный и читабельный):
' greetings.vbs — приветствие в зависимости от времени
Set Sapi = WScript.CreateObject("SAPI.SpVoice")
Dim hourNow
hourNow = Hour(Time)
If hourNow < 12 Then
Sapi.Speak "Good morning, Geekmeister"
ElseIf hourNow > 16 Then
Sapi.Speak "Good evening, Geekmeister"
Else
Sapi.Speak "Good afternoon, Geekmeister"
End IfПояснение:
- Hour(Time) возвращает целую часть часа по локальному времени компьютера.
- Логика: <12 — утро; 12..16 — день; >16 — вечер. При желании можно адаптировать границы.

Скрипт, который называет текущее время
Задача: компьютер называет часы и минуты понятным образом: “The current time is ten o’clock” или “The current time is 3:05 P.M.”.
Код (упрощён и упорядочен для читаемости):
' telling-time.vbs — произнести текущее время
Set Sapi = WScript.CreateObject("SAPI.SpVoice")
Dim h, m, hourToSpeak
h = Hour(Time)
m = Minute(Time)
Sapi.Speak "The current time is"
' Преобразуем часы в 12-часовой формат для произношения
If h = 0 Then
hourToSpeak = 12
ElseIf h > 12 Then
hourToSpeak = h - 12
Else
hourToSpeak = h
End If
Sapi.Speak CStr(hourToSpeak)
' Минуты: добавляем «o» для «o five» как в примере
If m < 10 Then
If m = 0 Then
Sapi.Speak "o'clock"
Else
Sapi.Speak "o"
Sapi.Speak CStr(m)
End If
Else
Sapi.Speak CStr(m)
End If
' AM / PM / special cases
If h = 0 And m = 0 Then
Sapi.Speak "Midnight"
ElseIf h = 12 And m = 0 Then
Sapi.Speak "Noon"
ElseIf h >= 12 Then
Sapi.Speak "P.M."
Else
Sapi.Speak "A.M."
End IfПояснения и варианты локализации:
- Можно перевести текст на русский: “Сейчас время” и произносить часы и минуты на русском языке. Для этого замените строки с “The current time is”, “o’clock”, “P.M.”, “A.M.” и т.д.
- Для более «человеческого» звучания можно реализовать словесное чтение минут (e.g. “пятнадцать” вместо “15”).
Автозапуск приветствия при старте Windows
Задача: сделать так, чтобы при входе в учётную запись Windows скрипт автоматически запускался и приветствовал пользователя.
Вариант 1 — перемещение .vbs в папку автозагрузки:
- Скопируйте готовый файл Startup greeting.vbs (или любой другой .vbs).
- Откройте Проводник и введите в адресной строке:
C:\Users\USERNAME\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
(замените USERNAME на ваше имя учётной записи).
- Вставьте .vbs-файл в эту папку — при следующем входе в систему Windows автоматически запустит его.
Вариант 2 — создание ярлыка в папке Startup:
- Можно создать ярлык на файл .vbs и поместить ярлык в ту же папку — это удобно, если вы хотите сохранить оригинал в другом месте.
Преимущества и ограничения:
- Простота: работает без дополнительных прав для локальной учётной записи.
- Ограничение: если политика безопасности или антивирус блокируют запуск скриптов, автозапуск может не сработать — см. раздел «Отладка и безопасность».

Настройки голоса: громкость, скорость, выбор голоса
SAPI поддерживает базовые свойства SpVoice, которые можно задавать прямо в VBScript:
- Rate — скорость речи (обычно диапазон от -10 до 10).
- Volume — громкость (0..100).
- Voice — выбор голосового токена из списка установленных голосов.
Пример установки скорости и громкости:
Set sapi = CreateObject("SAPI.SpVoice")
sapi.Rate = 0 ' скорость: -10..10
sapi.Volume = 80 ' громкость: 0..100
sapi.Speak "Настройки голоса применены"Пример выбора голоса (упрощённый):
Set sapi = CreateObject("SAPI.SpVoice")
Set voices = sapi.GetVoices()
If voices.Count > 0 Then
' Выбираем первый голос в списке; индексация с 0
Set sapi.Voice = voices.Item(0)
End If
sapi.Speak "Привет, я говорю другим голосом"Важно: набор голосов зависит от установленных языковых пакетов и голосовых движков в Windows. Для русского языка могут быть доступны голоса Microsoft, сторонние движки и пакеты Microsoft Speech Platform.
Отладка и типичные ошибки
Если скрипт не запускается или не слышно речи, проверьте следующие элементы:
- Файл сохранён с расширением .vbs, а не .txt. В проводнике включите отображение расширений файлов.
- Скрипт запускается двойным щелчком, но звук выключен — проверьте системную громкость и устройство вывода.
- Антивирус или политика безопасности блокируют запуск скриптов (.vbs) — проверьте сообщения антивируса и журналы событий.
- На некоторых редакциях Windows выполнение скриптов от имени WScript может потребовать дополнительных прав.
- Ошибки синтаксиса: используйте Notepad++ или VS Code для подсветки и отладки; закрывайте If/End If и используйте Set для объектов.
Полезная диагностика в скрипте:
- Добавьте MsgBox для проверки: MsgBox “До синтеза речи”.
- Логируйте действия в текстовый файл для последующей проверки (используя FileSystemObject).
Пример простого логирования:
Set fso = CreateObject("Scripting.FileSystemObject")
Set log = fso.OpenTextFile("C:\temp\tts-log.txt", 8, True)
log.WriteLine Now & " — Запуск скрипта"
log.CloseБезопасность, совместимость и ограничения
Важно учитывать риски при использовании .vbs-файлов и автозапуска:
- .vbs-файлы могут быть использованы злоумышленниками для запуска нежелательного кода. Не запускайте скрипты из ненадёжных источников.
- На рабочих компьютерах администратор может отключить выполнение скриптов или ограничить папку Startup.
- Антивирусы и средства контроля исполнения кода (AppLocker, Windows Defender Application Control) способны блокировать запуск.
- Для корпоративной среды предпочтительнее использовать подписанные скрипты и механизмы централизованного управления (групповые политики).
Рекомендации по безопасности:
- Подписывайте скрипты с цифровым сертификатом, если используете их в организации.
- Храните пользовательские скрипты в защищённых папках и создавайте ярлыки вместо перемещения самих файлов в Startup.
- При распространении инструкций для пользователей указывайте явную проверку кода перед запуском.
Совместимость:
- Поскольку VBScript и SAPI — технологии Win32/COM, они не работают в средах, где COM отключён (например, некоторые контейнерные или серверные минимальные образы).
- Для современных сценариев с кросс-платформенностью лучше рассмотреть PowerShell (в Windows), а для Linux/macOS — сторонние движки TTS.
Альтернативы и расширения
PowerShell — нативная современная оболочка: можно использовать .NET и System.Speech.Synthesis (Windows-only) для более гибкого TTS. Пример на PowerShell: использование System.Speech.Synthesis для управления голосами, сохранения в аудиофайл и т.д.
Сторонние TTS-сервисы (облачные): Google Cloud TTS, Amazon Polly, Azure Speech — дают высококачественные голоса и многоязычную поддержку, но требуют сети и/или оплаты.
Планировщик задач (Task Scheduler): если нужно точное расписание запуска (например, ежедневно в 9:00), используйте Планировщик задач вместо папки Startup.
Создание GUI: можно упаковать скрипт в исполняемый файл с помощью инструментов-обёрток, но это уже более сложная задача и может повлиять на доверие антивирусов.
Практические сценарии и примеры использования
- Уведомления для домашнего сервера: «Сервер завершил резервное копирование».
- Приветствие на рабочей станции в офисе при входе сотрудника.
- Озвучивание состояния длительного процесса: “Задача завершена”.
- Помощь пользователям с нарушениями зрения — простейший TTS для уведомлений.
Пример интеграции с внешним процессом (логика):
- Сценарий завершил задачу и записал флаг в файл.
- Скрипт-получатель проверяет этот флаг (FileSystemObject) и вызывает SAPI для произнесения сообщения.
Методология: как безопасно разработать и внедрить TTS-скрипт
- Планирование: определите цель (приветствие, оповещение, помощь).
- Разработка в песочнице: создайте и протестируйте .vbs в локальной учётной записи.
- Отладка: добавьте логирование и обработку ошибок.
- Принятие мер безопасности: проверьте антивирус, подпишите скрипт для корпоративного распространения.
- Внедрение: используйте Task Scheduler или ярлыки в папке Startup.
- Мониторинг: проверяйте логи и отзывы пользователей, обновляйте при необходимости.
Роли и чек-листы
Чек-лист для пользователя (быстрый старт):
- Скопировать пример скрипта в Блокнот.
- Сохранить как .vbs (убедиться, что расширение .vbs видно).
- Дважды щёлкнуть файл — убедиться, что звук слышен.
- При желании — поместить ярлык в папку Startup.
Чек-лист для администратора:
- Проверить политику исполнения скриптов и правила антивируса.
- Рассмотреть цифровую подпись скриптов.
- Документировать список разрешённых скриптов в организации.
- Настроить централизованный дистрибутив голосовых пакетов при необходимости.
Тестовые случаи и критерии приёмки
Критерии приёмки:
- Скрипт корректно запускается двойным щелчком и произносит заданный текст.
- Скрипт с диалогом принимает ввод и произносит введённую фразу.
- Скрипт «приветствие» выбирает корректную ветку (утро/день/вечер) на основе локального времени.
- Автозапуск работает после выхода/входа в учётную запись.
- Скрипт корректно ведёт лог (при наличии логирования).
Тестовые случаи:
- Запуск .vbs вручную — ожидаемый текст появился в аудиовыходе.
- Ввод пустой строки в InputBox — скрипт не пытается произнести пустую строку.
- Изменение системного времени — скрипт выбирает правильное приветствие.
- Помещение ярлыка в Startup — приветствие появилось при логине.
Отдельные советы по локализации и улучшению звучания
- Для русского языка замените текстовые строчки на русские и убедитесь, что в системе установлен русский голос.
- Чтобы избежать «роботического» звучания, варьируйте паузы: используйте дополнительные sapi.Speak “” с пустой строкой или короткие паузы (хотя SAPI не предоставляет явной функции pause, можно вставить ненулевые символы или управлять скоростью).
- Для более корректного чтения чисел (например, 01 как «ноль один») реализуйте форматирование строк до передачи в Speak.
Частые проблемы и способы их решения
Проблема: «Файл .vbs не запускается» — Причины и решение:
- Проверьте расширение: в свойствах файла видите ли вы .vbs?
- Попробуйте запустить через контекстное меню «Открыть с помощью» и выбрать wscript.exe или cscript.exe.
- Если ничего не помогает — проверьте логи антивируса и системный журнал.
Проблема: «Голос отсутствует / заметны шумы» — решение:
- Проверьте устройство вывода (динамики/наушники) и системную громкость.
- Попробуйте другой голос: возможно, текущий голос повреждён или отсутствует.
Таблица совместимости (упрощённо)
| Подход | Работает в Windows | Примечание |
|---|---|---|
| VBScript + SAPI | Да (классические версии Windows) | Зависит от политик безопасности и наличия SAPI/голосов |
| PowerShell + System.Speech | Да (Windows) | Более мощный, требует PowerShell и .NET |
| Облачные TTS | Кросс-платформенно | Требуют сеть и ключ API, платные |
Пример полного Startup-скрипта (объединённый)
' startup-greeting.vbs — комбинированное приветствие + время
Set Sapi = WScript.CreateObject("SAPI.SpVoice")
Dim h, m, hourToSpeak
h = Hour(Time)
m = Minute(Time)
' Приветствие по времени суток
If h < 12 Then
Sapi.Speak "Good morning, Geekmeister"
ElseIf h > 16 Then
Sapi.Speak "Good evening, Geekmeister"
Else
Sapi.Speak "Good afternoon, Geekmeister"
End If
' Назвать текущее время
Sapi.Speak "The current time is"
If h = 0 Then
hourToSpeak = 12
ElseIf h > 12 Then
hourToSpeak = h - 12
Else
hourToSpeak = h
End If
Sapi.Speak CStr(hourToSpeak)
If m < 10 Then
If m = 0 Then
Sapi.Speak "o'clock"
Else
Sapi.Speak "o"
Sapi.Speak CStr(m)
End If
Else
Sapi.Speak CStr(m)
End If
If h = 0 And m = 0 Then
Sapi.Speak "Midnight"
ElseIf h = 12 And m = 0 Then
Sapi.Speak "Noon"
ElseIf h >= 12 Then
Sapi.Speak "P.M."
Else
Sapi.Speak "A.M."
End If
Дополнительные ресурсы и загрузки
Если самостоятельно собирать скрипты неудобно, вы можете загрузить готовые примеры (например, Geek Test, Greeting, Startup Greeting, Telling Time, Text to Speech) — проверяйте источники и подпись файлов перед запуском.

Маленький глоссарий (1 строка на термин)
- SAPI — Speech API от Microsoft, движок синтеза речи.
- VBScript — скриптовый язык для автоматизации в Windows (COM).
- WScript/Cscript — хосты Windows Script Host для запуска скриптов.
- Token (в контексте голосов) — объект, описывающий голосовой движок/голос.
Вывод
Использование VBScript и SAPI позволяет довольно просто добавить голосовую озвучку в повседневные рабочие процессы Windows. Это удобно для быстрых уведомлений, приветствий и помощи пользователям. При внедрении в реальную среду учитывайте вопросы безопасности, совместимости и политики исполнения кода.
Важно: если вам нужна более качественная или серверная озвучка, рассмотрите переход на PowerShell + System.Speech или облачные TTS-сервисы.
Ключевые ссылки (для быстрой ориентации):
- Geek Test
- Greeting
- Startup Greeting
- Telling Time
- Text to Speech
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента