Delphi урок - Воспроизводим звук в программе без MediaPlayer

Опубиковано: 25.03.2009 г., автор: , просмотров: 125034

Delphi урок - Воспроизводим звук в программе без MediaPlayer

Парадокс, но я часто сталкиваюсь с тем, что многие не умеют воспроизводить звук в программе без использования компонента 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);

Вот в принципе и все что я хотел рассказать вам в этом уроке. До встречи.

скачать Скачать звуковой файл в формате wav для экспериментов.

P.S. Хотите вперед всех остальных посетителей сайта получать свежие Видео уроки, Аудио подкасты, статьи по Delphi.
Участвовать в конкурсах и постепенно вливаться в нашу команду ?!
Тогда прямо сейчас подписывайтесь на бесплатную мультимедийную рассылку сайта delphiexpert.ru
Нас уже больше чем 1500 человек ! Подписаться



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

Последние из рубрики

LINE_LIFE 17 Mar 2010 в 00:00 #
>>>Коментарий добавил(а): влад
>>>Дата: 2010-03-16

>>>как в res музыку добавлять ?
С помощью стандартной утилиты которая в ходит в комплект delphi она находится в Binbrc32.exe подробнее если хочешь магу рассказать как упаковать файлы в .res! Пиши на мыло xd.xd@mail.ru
влад 16 Mar 2010 в 00:00 #
как в res музыку добавлять ?
Ильназ 03 Mar 2010 в 00:00 #
А как можно его остановить с помощью какой команды не закрывая form
Unit 26 Feb 2010 в 00:00 #
А как сделать чтобы когда уменя в чате приходило собщение в listbox выдовался звук сигнал?
Артеме 25 Feb 2010 в 00:00 #
есть одна проблема с этим, если в программе предварительно использовался компонент opendialog для открытия файла, в моём случае текстового, то хз по какой причине, но звуковой файл воспроизводиться не будет, что делать, хз, уже замучился

ОтменитьДобавить комментарий