Друзья
Друзья


Фоновая музыка в Delphi-приложении

altПривет! Настало время разобраться с фоновой музыкой в Delphi-приложениях. Ты, наверно, сразу скажешь : "Дак можно просто взять TMediaPlayer и сделать его невидимым". Можно. Я не спорю. Но так прога будет кушать больше ресурсов компьютера. Да и звуковые файлы отдельно от EXE-шника таскать не удобно : могут изменить или вообще удалить.

Сегодня я покажу тебе, как запихать WAV-файлы в EXE-шник и как воспроизвести их без компонента MediaPlayer. Если ты готов, то создавай новый проект и сразу сохраняй его в отдельную директорию.

Ресурсы

Начнём мы с файла-ресурсов. Подбери какие-нибудь звуки. Я назвал их Sound01 и Sound02. Теперь создавай в директории своего проекта текстовый файл со следующим содержанием:

Sound01 RCDATA LOADONCALL Sound01.wav
Sound02 RCDATA LOADONCALL Sound02.wav

Как ты наверно уже понял, это названия и пути к файлам. У нас файлы хранятся прямо в каталоге с ресурсом, так что путь указывать необязательно, а достаточно просто указать имя. В данном примере два файла - Sound01 и Sound02. Но ты можешь запихать их туда сколько угодно, хоть альбом своего любимого певца smile.

Теперь переименовывай наш текстовый файл в "Sound.rc". Так. Теперь надо всё это дело скомпилировать. Компилить ресурсы будем через BRCC32.exe (Borland Resource CommandLine Compiler), который идёт в стандартной поставке Delphi. В качестве параметра нужно указывать путь и имя файла ресурсов. В нашем случае нужно выполнить строку:

C:\-директория Delphi-\BIN\BRCC32.EXE C:\-директория проекта-\Sound.rc

В случае удачного стечения обстоятельств (ого, как завернул!), в смысле если всё прошло нормально, то в каталоге нашей программы появиться файл "Sound.res". Теперь его надо привязать к нашему проекту...

Кодим

Итак, файл ресурсов создан. Теперь, в проекте после строки {$R *.dfm} нужно добавить ещё строку {$R Sound.res} . Этими действиями мы линкуем (привязываем) наш файл ресурсов к EXE-шнику, т.е. при компиляции проекта все файлы из ресурса встроются в тело программы.

Теперь начнём работу с этими ресурсами. Сначала добавь в раздел uses ещё один модуль MMSystem, он нам пригодится для воспроизведения WAV-файлов.
Давай сначала напишем процедуру воспроизведения файла из ресурсов. У меня она получилась вот такой :

procedure PlayWAVfromRES(name:PAnsiChar);
var
hResource: THandle;
pData: Pointer;//указатель на ресурс
begin
hResource:=LoadResource( hInstance, FindResource(hInstance, name, RT_RCDATA));
pData := LockResource(hResource);
SndPlaySound(pData, SND_MEMORY);
FreeResource(hResource);
end;

Здесь всё просто: сначала получаем хендл ресурса при помощи функции LoadResource. В качестве второго параметра, передаваемого этой функции, идёт результат функции FindResource. Эта функция отыскивает нужный нам ресур по его имени (в данном случае это переменная name). Потом указываем нашему указателю на ресурс. А при помощи SndPlaySound(pData, SND_MEMORY); мы проигрываем полученный файл. Ну а последней строкой мы освобождаем файл-ресурс из памяти.

Теперь добавь к форме кнопочку и создай обработчик нажатия этой кнопки. Впиши в него следующее:

PlayWAVfromRES('Sound01');
Это вызов нашей процедуры. В качестве единственного параметра указываем имя ресурса. Теперь можно сделать чтоб ещё один звук проигрывался при открытии приложения. Для этого создай обработчик события OnCreate нашей формы и впиши туда:

PlayWAVfromRES('Sound02');



 
Самое популярное
Яндекс.Метрика