Последняя версия DataExpress 26.9.23

Изображение Скачать | Изображение Что нового? | Демо

Проигрывание звука и озвучивание текста Windows

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

Модератор: Разработчики расширений

mobmk
Интересующийся
Сообщения: 73
Зарегистрирован: 26 янв 2026, 01:40
Откуда: Землянин
Благодарил (а): 63 раза
Поблагодарили: 22 раза

Проигрывание звука и озвучивание текста Windows

Сообщение mobmk » 07 авг 2026, 18:09

Расширение «Мультимедиа»: Фоновый звук (WAV) и Синтез речи (SAPI)

Предлагаю простенькое готовое расширение для DataExpress, которое добавляет две функции для взаимодействия с пользователем с помощью звуков и голоса. Обе функции работают в фоновом режиме (асинхронно) — программа не подвисает во время воспроизведения, и пользователь может сразу продолжать работу.

Основные фишки модуля:
  • Умные относительные пути — функции не привязаны к конкретному диску или папке (базу можно носить на флешке).
  • Всеядный синтаксис слэшей — модуль сам исправляет прямые веб-слэши / на обратные виндовые \.
  • Синтез речи без файлов — робот говорит любой переданный текст встроенным голосом Windows (SAPI), искать и скачивать аудиофайлы больше не нужно.
  • Защита от сбоев — если в операционной системе вырезан голосовой движок, программа не выдаст ошибку, а просто пропустит шаг.


Как использовать в проекте:

После добавления расширения функции появятся в Дизайнере выражений в группе «Мультимедиа».
Их можно использовать в действиях кнопок без написания кода формы или вызывать по условию.

Примеры вызовов:

Код: Выделить всё

// Проиграть файл ding.wav из папки tools, которая лежит рядом с DataExpress.exe
PLAY_SOUND('/tools/ding.wav')

// Озвучить событие голосом робота (используется стандартный русский голос Windows)
SAY_TEXT('Появилась новая информация')



Код расширения:

Код: Выделить всё

{@module
Author=
Version=1.0
Description=<b>Модуль Мультимедиа</b><p>Добавляет в систему функции фонового воспроизведения звуковых файлов (WAV) с автоматической обработкой относительных путей и голосового оповещения через встроенный синтезатор речи Windows (SAPI).
@}
{@function
OrigName=PLAY_SOUND
Name=PLAY_SOUND
Args=v
Result=
Group=Мультимедиа
Description=Процедура проигрывания звука с поддержкой относительных и абсолютных путей.<p><b>Параметры:</b> путь к имени аудиофайла (можно использовать / или \)<p><b>Пример:</b><p><code>PLAY_SOUND('/tools/ding.wav')</code><p><code>PLAY_SOUND('C:\Windows\Media\tada.wav')</code>
@}
function PlaySound(pszSound: PChar; hmod: WORD; fdwSound: integer): boolean;
external 'PlaySoundA@winmm.dll stdcall';
var GlobalVoice: Variant;
procedure PLAY_SOUND(v: variant);
var
  FullPath: String;
  i: Integer;
begin
  if (v = Null) or (VarToStr(v) = '') then Exit;
  FullPath := VarToStr(v);
  for i := 1 to Length(FullPath) do
    if FullPath[i] = '/' then FullPath[i] := '\';
  if (Length(FullPath) > 0) and (FullPath = '\') then
    Delete(FullPath, 1, 1);
  if Pos(':', FullPath) = 0 then
    FullPath := ExtractFilePath(Application.ExeName) + FullPath;
  PlaySound(PChar(FullPath), 0, 1);
end;
{@function
OrigName=SAY_TEXT
Name=SAY_TEXT
Args=v
Result=
Group=Мультимедиа
Description=Голосовое оповещение (синтез речи Windows). Робот произнесет переданный текст.<p><b>Параметры:</b> Текст для озвучки<p><b>Пример:</b><p><code>SAY_TEXT('Появилась новая информация')</code>
@}
procedure SAY_TEXT(v: variant);
begin
  if (v = Null) or (VarToStr(v) = '') then Exit;
  try
    if VarIsEmpty(GlobalVoice) then
      GlobalVoice := CreateOleObject('SAPI.SpVoice');
    GlobalVoice.Speak(VarToStr(v), 1);
  except
  end;
end;
Вложения
sound_and_speech.epas
(2.37 КБ) 38 скачиваний

Теги:

memo
Интересующийся
Сообщения: 153
Зарегистрирован: 08 окт 2019, 22:54
Благодарил (а): 54 раза
Поблагодарили: 16 раз

Проигрывание звука и озвучивание текста Windows

Сообщение memo » 07 авг 2026, 21:19

Игрушки со звуками — это интересно. Но если бы можно было регулировать громкость сигнала и голоса, это было бы ещё лучше.

auct
Новичок
Сообщения: 22
Зарегистрирован: 18 янв 2021, 16:28
Благодарил (а): 5 раз
Поблагодарили: 1 раз

Проигрывание звука и озвучивание текста Windows

Сообщение auct » 02 окт 2026, 13:44

Как пользоваться?
Добавил расширение, никаких дополнительных фич не появилось. Компилятор выдает ошибку.

memo
Интересующийся
Сообщения: 153
Зарегистрирован: 08 окт 2019, 22:54
Благодарил (а): 54 раза
Поблагодарили: 16 раз

Проигрывание звука и озвучивание текста Windows

Сообщение memo » 02 окт 2026, 15:00

auct писал(а):Как пользоваться?

попробуйте в действие формы вызвать функцию PLAY_SOUND('C:\Windows\Media\ring06.wav')

mobmk
Интересующийся
Сообщения: 73
Зарегистрирован: 26 янв 2026, 01:40
Откуда: Землянин
Благодарил (а): 63 раза
Поблагодарили: 22 раза

Проигрывание звука и озвучивание текста Windows

Сообщение mobmk » 02 окт 2026, 16:36

auct писал(а):Как пользоваться?
Добавил расширение, никаких дополнительных фич не появилось. Компилятор выдает ошибку.

Какую ошибку выдаёт?
И вы описание читали?

Аватара пользователя
avk
Интересующийся
Сообщения: 112
Зарегистрирован: 29 окт 2025, 18:24
Благодарил (а): 3 раза
Поблагодарили: 42 раза

Проигрывание звука и озвучивание текста Windows

Сообщение avk » 02 окт 2026, 20:22

mobmk писал(а):Какую ошибку выдаёт?
И вы описание читали?

Ну, как минимум с кириллицей в пути работать не будет, потому-что вы не обернули их в Utf8ToWinCP.

auct
Новичок
Сообщения: 22
Зарегистрирован: 18 янв 2021, 16:28
Благодарил (а): 5 раз
Поблагодарили: 1 раз

Проигрывание звука и озвучивание текста Windows

Сообщение auct » 05 окт 2026, 09:02

mobmk писал(а):
auct писал(а):Как пользоваться?
Добавил расширение, никаких дополнительных фич не появилось. Компилятор выдает ошибку.

Какую ошибку выдаёт?
И вы описание читали?


Снимок.PNG
Снимок.PNG (39.8 КБ) 423 просмотра

Аватара пользователя
avk
Интересующийся
Сообщения: 112
Зарегистрирован: 29 окт 2025, 18:24
Благодарил (а): 3 раза
Поблагодарили: 42 раза

Проигрывание звука и озвучивание текста Windows

Сообщение avk » 05 окт 2026, 09:56

{$i sound_and_speech} забыли.
или EvalExpr('SAY_TEXT("..")',null)

Аватара пользователя
k245
Интересующийся
Сообщения: 171
Зарегистрирован: 25 май 2019, 08:02
Откуда: Краснодар
Благодарил (а): 108 раз
Поблагодарили: 24 раза
Контактная информация:

Проигрывание звука и озвучивание текста Windows

Сообщение k245 » 05 окт 2026, 14:13

avk писал(а):...или EvalExpr('SAY_TEXT("..")',null)

А вот тут можно поподробней? :)

Как работает директива {$I} - описано в документации
А вот о том, что EvalExpr не требует включение вызываемого скрипта в модуль формы... Впрочем, обратное тоже не утверждается. Выглядит как очень перспективная фича :)

Аватара пользователя
cordek
Эксперт
Сообщения: 2563
Зарегистрирован: 14 май 2017, 14:53
Благодарил (а): 754 раза
Поблагодарили: 612 раз
Контактная информация:

Проигрывание звука и озвучивание текста Windows

Сообщение cordek » 05 окт 2026, 15:52

k245 писал(а):
avk писал(а):...или EvalExpr('SAY_TEXT("..")',null)

А вот тут можно поподробней? :)

Как работает директива {$I} - описано в документации
А вот о том, что EvalExpr не требует включение вызываемого скрипта в модуль формы... Впрочем, обратное тоже не утверждается. Выглядит как очень перспективная фича :)


EvalExpr работает с зарегистрированными функциями из расширений.
В расширениях могут быть:
1) функции
2) действия
действия мы подключаем либо при запуске, либо к форме, либо к кнопке.
Функции используем во встроенном редакторе выражений, условий. EvalExpr может обрабатывать выражения, созданные во встроенном редакторе выражений.
балуюсь разработкой LIMS JDX
cordek {/а} yandex/ru


Вернуться в «Каталог расширений»