Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курс лекций по дисциплине Объектно-ориентирован...doc
Скачиваний:
33
Добавлен:
01.07.2025
Размер:
14 Мб
Скачать
☆

1.1.2 Процедуры воспроизведения звуков Веер, MessageBeep и PlaySound

Наиболее простой процедурой, управляющей звуком, является процедура Веер. Она не имеет параметров и воспроизводит стандартный звуковой сигнал, установленный в Windows, если компьютер имеет звуковую карту и стандартный сигнал задан (он устанавливается в программе Windows «Панель управления» после щелчка на пиктограмме Звук). Если звуковой карты нет или стандартный сигнал не установлен, звук воспроизводится через динамик компьютера просто в виде короткого щелчка.

Откройте новое приложение, введите в него кнопку, в обработчике щелчка которой напишите одно слово:

Веер;

Можете запустить приложение, щелкнуть на кнопке и прослушать стандартный звук Windows или просто щелчок, если стандартный звук не установлен. Более серьезной процедурой является MessageBeep. Она определена как

function MessageBeep(uType:word): boolean;

Параметр uType указывает воспроизводимый звук как идентификатор раздела [sounds] реестра, в котором записаны звуки, сопровождающие те или иные события в Windows. С помощью приложения Звук в «Контрольной панели» пользователь может удалить или установить соответствующие звуки.

Таблица 71.

Параметр uType может иметь следующие значения:

Значение

Звук

MB_ICONASTERISK

SystemAsterisk — звездочка

MB ICONEXCLAMATION

SystemExclamation — восклицание

MB_ICONHAND

SystemHand — критическая ошибка

MB_ICONQUESTION

SystemQuestion — вопрос

MB_OK

SystemDefault — стандартный звук

После запроса звука функция MessageBeep возвращает управление вызвав­шей функции и воспроизводит звук асинхронно. Во время воспроизведения приложение может продолжать выполняться.

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

При успешном выполнении возвращается ненулевое значение. При аварийном завершении возвращается нуль.

Можете в своем текстовом приложении ввести еще одну кнопку и написать для нее обработчик:

MessageBeep(МВ_ОК) ;

Вы услышите тот же стандартный звук Windows, что и при выполнении процедуры Веер. Или услышите тот же тихий щелчок, если стандартный звук не установлен. Попробуйте установить различные звуки с помощью «Панели управления» и проверить MessageBeep при различных значениях ее параметра.

Функция PlaySound позволяет воспроизводить не только звуки событий Windows, но и любые волновые файлы. Это функция API Windows, параметры которой описаны в модуле mmsys-tem. Поэтому для использования этой функции в вашем приложении необходимо включить в его оператор uses ссылку на mmsystem, поскольку автоматически эту ссылку Delphi не включает.

Функция PlaySound определена следующим образом:

function PlaySound(pszSound:PChar; hmod:HINST; fdwSound:Cardinal) :boolean;

Параметр pszSound представляет собой строку с нулевым символом в конце и определяет воспроизводимый звук. Параметр hmod используется, если звук берется из ресурса. Подробнее о ресурсах вы можете посмотреть в справочной части книги. А поскольку далее звуками из ресурса мы пользоваться не будем, то hmod всегда можно задавать равным nil или 0.

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

SND_ASYNC Звук воспроизводится асинхронно и функция PlaySound возвращается немедленно после начала воспроизведения. Чтобы прекратить асинхронное воспроизведение волнового файла, надо вызвать PlaySound с параметром pszSound, равным 0.

SND_LOOP Воспроизведение звука постоянно повторяется, пока не вызовется PlaySound с параметром pszSound, равным 0. Одновременно надо установить флаг SND_ASYNC асинхронного воспроизведения звука.

SND_NOSTOP Если заданный звук не может быть воспроизведен, поскольку ресурсы, необходимые для воспроизведения, заняты воспроизведением другого звука, функция PlaySound немедленно вернет false, не воспроизводя заданного звука. Если данный флаг не указан, функция PlaySound пытается остановить воспроизведение другого звука, чтобы устройство могло быть использовано для воспроизведения нового звука

SND_NOWAIT Если драйвер занят, функция сразу вернется без воспроизве­дения заданного звука

SND_PURGE Останавливается воспроизведение любых звуков, вызванных в данной задаче. Если pszSound не 0, останавливаются все эк­земпляры указанного звука. Если pszSound равен 0, то останавливаются все звуки, связанные с данной задачей

SND_SYNC Синхронное воспроизведение звука события. Функция PlaySound возвращается только после окончания воспроизведения

Флаги могут комбинироваться операцией оr.

Звук, указанный параметром pszSound, должен помещаться в доступную память и должен подходить для установленного драйвера устройства воспроизведения волновых файлов. Функция PlaySound ищет файл звука в следующих каталогах: текущем, каталоге Windows, системном каталоге Windows, каталогах, перечисленных в переменной среды PATH, в списке каталогов, предоставляемых сетью. Если указанный звук не находится, функция PlaySound воспроизводит системный звук по умолчанию. Если функция не может найти и его, то воспроизведения не будет, а вернется значение false.

Приведем примеры использования функции PlaySound.

Оператор PlaySound('с:\win95\media\Звук Microsoft.wav’,О,SND_ASYNC);

воспроизводит асинхронно и однократно стандартный звук Microsoft, который вы обычно можете слышать при открытии Windows. В процессе воспроизведения продолжается выполнение приложения.

Чтобы опробовать функцию PlaySound, введите в свое приложение диалог OpenDialog и кнопку со следующим обработчиком щелчка:

if OpenDialogl.Execute then PlaySound(PChar(OpenDialogl.FileName), 0, SND_ASYNC);

Запустите приложение, выберите файл какой-нибудь приятной музыки и работайте со своим приложением, наслаждаясь попутно выбранной мелодией.

В предыдущих примерах звук задавался именем его волнового файла. Функция PlaySound позволяет воспроизводить и системные звуки, просто называя их псевдонимы. Например, оператор

PlaySound('SystemStart',О,SND_ASYNC);

воспроизведет тот же звук открытия Windows, что и приведенный ранее оператор, указывавший имя и путь к нему. Оператор

PlaySound('с:\win95\media\3ByK Microsoft.wav', О, SND_ASYNC or SND_LOOP);

многократно асинхронно воспроизводит стандартный звук Microsoft, начиная его снова и снова, как только он заканчивается. Если вы ввели в свое приложение подобный оператор (пусть даже и с очень приятной музыкой), вам надо предусмотреть еще и какую-нибудь кнопку, по которой воспроизведение прерывается зада­нием нового звука или выполнением оператора

PlaySound(0,0, SND_PURGE);

Оператор PlaySound('с:\win95\media\3ByK Microsoft.wav',0, SND_SYNC); будет воспроизводить звук синхронно. Т.е. функция PlaySound не вернется, пока воспроизведение не завершится. На это время ваше приложение будет блокировано. Впрочем, ваши действия во время этого вынужденного простоя запомнятся системой. И если вы, слушая музыку, щелкнули на той же кнопке повторно, то после окончания звука он будет повторен, так как ваш щелчок встал в очередь событий.

Все рассмотренные ранее операторы прерывали при своем выполнении звук, который асинхронно воспроизводился в момент вызова PlaySound. Если же вы вы­полните оператор с флагом SND_NOSTOP, например:

PlaySound('с:\win95\media\3ByK Microsoft.wav',0, SND_SYNC or SND_NOSTOP)

то в случае, если в этот момент драйвер занят воспроизведением другого звука, это воспроизведение не будет прерываться, а функция PlaySound сразу вернет false. Впрочем, заказанного этим оператором звука вы в этом случае не услышите, т.к. в очередь он не встанет.

Мы рассмотрели основные функции воспроизведения звука. В Delphi (начиная с Delphi 2) имеется также компонент MediaPlayer — универсальный проигрыватель аудио- и видеоинформации.