Гид по технологиям

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

• 10 min read • How-to • Обновлено 25 Nov 2025
Как заставить компьютер говорить: VBScript TTS
Как заставить компьютер говорить: VBScript TTS

Фотография компьютера с надписью «Stupid Geek Tricks: How to Make Your Computer Talk to You»

Содержание

  • Краткая история 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-файл, который при двойном щелчке запускает фразу голосом системы.

Основные шаги:

  1. Откройте Блокнот (Notepad).
  2. Вставьте следующий код (пример исправлен для корректного синтаксиса):
' geek-test.vbs — простой пример синтеза речи
Dim speechobject
Set speechobject = CreateObject("SAPI.SpVoice")
speechobject.Speak "The geeks shall inherit the earth"
  1. Сохраните файл с расширением .vbs, например: Geek test.vbs.
  2. Дважды щёлкните файл в Проводнике — ваш ПК произнесёт заданную фразу.

Заметка: чтобы изменить фразу, просто замените строку в кавычках.

Окно с примером скрипта синтеза речи

Скрипт «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 в папку автозагрузки:

  1. Скопируйте готовый файл Startup greeting.vbs (или любой другой .vbs).
  2. Откройте Проводник и введите в адресной строке:

C:\Users\USERNAME\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup

(замените USERNAME на ваше имя учётной записи).

  1. Вставьте .vbs-файл в эту папку — при следующем входе в систему Windows автоматически запустит его.

Вариант 2 — создание ярлыка в папке Startup:

  • Можно создать ярлык на файл .vbs и поместить ярлык в ту же папку — это удобно, если вы хотите сохранить оригинал в другом месте.

Преимущества и ограничения:

  • Простота: работает без дополнительных прав для локальной учётной записи.
  • Ограничение: если политика безопасности или антивирус блокируют запуск скриптов, автозапуск может не сработать — см. раздел «Отладка и безопасность».

Помещение скрипта в папку автозагрузки Windows


Настройки голоса: громкость, скорость, выбор голоса

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.

Альтернативы и расширения

  1. PowerShell — нативная современная оболочка: можно использовать .NET и System.Speech.Synthesis (Windows-only) для более гибкого TTS. Пример на PowerShell: использование System.Speech.Synthesis для управления голосами, сохранения в аудиофайл и т.д.

  2. Сторонние TTS-сервисы (облачные): Google Cloud TTS, Amazon Polly, Azure Speech — дают высококачественные голоса и многоязычную поддержку, но требуют сети и/или оплаты.

  3. Планировщик задач (Task Scheduler): если нужно точное расписание запуска (например, ежедневно в 9:00), используйте Планировщик задач вместо папки Startup.

  4. Создание GUI: можно упаковать скрипт в исполняемый файл с помощью инструментов-обёрток, но это уже более сложная задача и может повлиять на доверие антивирусов.


Практические сценарии и примеры использования

  • Уведомления для домашнего сервера: «Сервер завершил резервное копирование».
  • Приветствие на рабочей станции в офисе при входе сотрудника.
  • Озвучивание состояния длительного процесса: “Задача завершена”.
  • Помощь пользователям с нарушениями зрения — простейший TTS для уведомлений.

Пример интеграции с внешним процессом (логика):

  1. Сценарий завершил задачу и записал флаг в файл.
  2. Скрипт-получатель проверяет этот флаг (FileSystemObject) и вызывает SAPI для произнесения сообщения.

Методология: как безопасно разработать и внедрить TTS-скрипт

  1. Планирование: определите цель (приветствие, оповещение, помощь).
  2. Разработка в песочнице: создайте и протестируйте .vbs в локальной учётной записи.
  3. Отладка: добавьте логирование и обработку ошибок.
  4. Принятие мер безопасности: проверьте антивирус, подпишите скрипт для корпоративного распространения.
  5. Внедрение: используйте Task Scheduler или ярлыки в папке Startup.
  6. Мониторинг: проверяйте логи и отзывы пользователей, обновляйте при необходимости.

Роли и чек-листы

Чек-лист для пользователя (быстрый старт):

  • Скопировать пример скрипта в Блокнот.
  • Сохранить как .vbs (убедиться, что расширение .vbs видно).
  • Дважды щёлкнуть файл — убедиться, что звук слышен.
  • При желании — поместить ярлык в папку Startup.

Чек-лист для администратора:

  • Проверить политику исполнения скриптов и правила антивируса.
  • Рассмотреть цифровую подпись скриптов.
  • Документировать список разрешённых скриптов в организации.
  • Настроить централизованный дистрибутив голосовых пакетов при необходимости.

Тестовые случаи и критерии приёмки

Критерии приёмки:

  • Скрипт корректно запускается двойным щелчком и произносит заданный текст.
  • Скрипт с диалогом принимает ввод и произносит введённую фразу.
  • Скрипт «приветствие» выбирает корректную ветку (утро/день/вечер) на основе локального времени.
  • Автозапуск работает после выхода/входа в учётную запись.
  • Скрипт корректно ведёт лог (при наличии логирования).

Тестовые случаи:

  1. Запуск .vbs вручную — ожидаемый текст появился в аудиовыходе.
  2. Ввод пустой строки в InputBox — скрипт не пытается произнести пустую строку.
  3. Изменение системного времени — скрипт выбирает правильное приветствие.
  4. Помещение ярлыка в 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-сервисы.


Ключевые ссылки (для быстрой ориентации):

  1. Geek Test
  2. Greeting
  3. Startup Greeting
  4. Telling Time
  5. Text to Speech
Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро