Delphi урок - Воспроизводим звук в программе без MediaPlayer
Автор урока: Владимир Любаев
Источник:
http://www.delphiexpert.ru/view_lesson.php?id=71
--
Парадокс, но я часто сталкиваюсь с тем, что многие не умеют воспроизводить звук
в программе без использования компонента MediaPlayer. В этом небольшом уроке
я хочу исправить это дело и показать вам, как проиграть у себя в программе
звуковой файл в формате Wav без использования MediaPlayer.
На самом деле делается это очень просто.
Достаточно всего лишь добавить в раздел uses модуль mmsystem
И далее в месте где вам нужно воспроизвести звук использовать функцию PlaySound
function PlaySound(pszSound:PChar; hmod:HINST; fdwSound:Cardinal):boolean;
Как всегда разберем это на конкретном примере.
Первым делом открываем Delphi, создаем новый проект и дописываем в раздел uses
модуль mmsystem.
Далее кидаем на форму кнопку (Button) с закладки Standard и создаем на ней
обработчик событий Onclick.
Между begin end пишем:
PlaySound('D:\1.wav', 0, SND_ASYNC);
Первый параметр в нашей функции это полный путь к звуковому файлу с указанием
его расширения, т.к. у меня файл называется 1.wav и находиться на диске
D:\ я написал тут 'D:\1.wav'.
Второй параметр используется в случае, когда звук берется из ресурса, поскольку
мы этого делать не будем, то можно этот параметр задавать равным 0 или nil.
Последний параметр определяет, как будет воспроизводиться звук
(режим воспроизведения). Существует несколько режимов воспроизведения
которые задаются соответствующими флагами, вот пример некоторых из них:
SND_ASYNC - Звук воспроизводится асинхронно и функция возвращается сразу же
после начала воспроизведения. Чтобы прекратить воспроизведение нужно вызвать
функцию PlaySound с параметром pszSound, равным 0.
SND_LOOP - воспроизведение звука постоянно повторяется, одновременно надо
установить флаг SND_ASYNC.
SND_NOSTOP - Если заданный звук не может быть воспроизведен из-за занятости
ресурсов, то функция немедленно вернет false (и звук не будет воспроизведен).
Если же данный флаг не указан, то функция попытается остановить воспроизведение
другого звука, чтобы освободить ресурсы.
SND_PURGE - Останавливает воспроизведение любых звуков, вызванных в данной задаче.
SND_SYNC - Синхронное воспроизведение звука события. Функция PlaySound
возвращается только после окончания воспроизведения.
т.е. Если мы хотим, чтобы звук воспроизводился асинхронно и постоянно повторялся
в нашей функции нужно использовать флаги SND_ASYNC и SND_LOOP.
Комбинировать флаги можно при помощи операции or.
Пример:
PlaySound('D:\1.wav', 0, SND_ASYNC or SND_LOOP);
Вот в принципе и все что я хотел рассказать вам в этом уроке. До встречи.
Владимир Любаев