Delphi Воспроизводим звук в программе без MediaPlayer
Парадокс, но я часто сталкиваюсь с тем, что многие не умеют
воспроизводить звук в программе без использования компонента
MediaPlayer. В этом небольшом уроке я хочу исправить это дело и
показать вам, как проиграть у себя в программе звуковой файл в формате
Wav без использования MediaPlayer. На самом деле делается это очень просто.
Достаточно всего лишь добавить в раздел uses модуль mmsystem И далее в месте где вам нужно воспроизвести звук использовать функцию PlaySound
unction 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); |
|