Воспроизведение звукового файла через PlaySound
Как поместить в исполняемый файл wav-файл, и затем проиграть его? |
*
| *
|
| |
1. Создаем файл MyWave.rc и пишем в него строчку:
MYWAVE RCDATA LOADONCALL MyWave.wav
Формат строки:
<имя> <тип> <опции> <имя файла>, где
Имя - уникальное имя ресурса, по которому мы затем будем с ним работать. Теоретически (да и практически)
имя не чувствительно к регистру, но лучше не рисковать и всегда именовать ресурсы большими
буквами
2. Компилируем ресурсный файл при помощи brcc32.exe (он лежит в папке BIN Delphi)
brcc32.exe MyWave.rc, получаем MyWave.res.
3. Перемещаем полученный ресурс в папку проекта
Затем в программе воспроизведение звука выглядит примерно так:
{$R MyWave.res} // Не забудем подключить наш ресурс
procedure RetrieveMyWave;
var
hResource : THandle;
pData : Pointer;
begin
hResource:=LoadResource( hInstance, FindResource(hInstance, 'MYWAVE', RT_RCDATA));
try
pData := LockResource(hResource);
if pData = nil then raise Exception.Create('Ошибка чтения ресурса MyWave');
// Здесь pData указывает на MyWave
// Теперь можно, например, проиграть его:
PlaySound('MyWave', pData, SND_NODEFAULT);
finally
FreeResource(hResource);
end;
end;
Воспроизведение звукового файла через PlaySound |
*
| *
|
| |
Достаточно часто при разработке программ возникает необходимость воспроизвести
звуковой файл с заданным именем. Для решения этой задачи удобно использовать функцию
API PlaySound:
PlaySound(pszSound: PChar; hmod: HMODULE; fdwSound: DWORD): BOOL;
- pszSound - задает имя звукового файла или имя ресурса, хранящего звук
- hmod - Handle на модуль, содержащий ресурс (применяется только при хранении звуковых данных
в ресурсе, для загрузки звукового файла он должен быть равет NULL (0)
- fdwSound - управляющие флаги
- SND_ASYNC - если данный флаг установлен, то воспроизведение начинается немедленно и
асинхронно (для прерывания воспроизведения нужно вызвать pszSound = NULL)
- SND_FILENAME - данный флаг указывает функции на необходимость рассматривать параметр pszSound
как имя файла
- SND_LOOP - циклическое воспроизведение звука
- SND_NOWAIT - если данный флаг установлен и драйвер занят на момент вызова функции, то функция
немедленно возвращает управление без воспроизведения звука
- SND_NOSTOP - если данный флаг установлен и в момент вызова функции идет воспроизведение,
то оно не прерывается и функция немедленно возвращает управление (возврат = false). Если флаг не указан,
то функция пытается остановить текущее воспроизведение и начать воспроизведение заданного
звукового ресурса
- SND_NODEFAULT - блокировка воспроизведения звукового сигнала при отсутствии указанного в pszSound
звукового файла
- SND_PURGE - прерывание вопроизведения звука. Если pszSound равет NULL, то прерывается
воспроизведение всех воспроизводимых звуков
- SND_RESOURCE - pszSound воспринимается как имя ресурса, при этом hmod должен указыват на модуль,
содержащий ресурс с указанным именем
- SND_SYNC - синхронное воспроизведение звука (функция вернет управление после завершения
воспроизвеедения)
© Зайцев Олег, "Программирование на Delphi - обмен опытом" 1999-2004. При использовании любых материалов данного сайта
необходимо указывать источник информации. Дата обновления: 22.11.2004. Сайт размещен на хостинге AGAVA -
Хостинг от AGAVA.ru