Заставить приложение загружать и проигрывать звуковой файл
|
Священник, врач и программист играли вместе в гольф. Переходя от лунки к лунке, они вскорости догнали трех игроков, которые двигались страшно медленно. Возмущенные, они вызвали управляющего и спросили его, в чем дело?... Управляющий:
- Видите ли, несколько лет тому назад в нашем клубе был пожар. А эти трое ребят спасли нас от полного уничтожения. К сожалению, в результате ожогов они потеряли зрение. А мы в знак благодарности разрешили им играть у нас в гольф совершенно бесплатно.
Священник (сконфуженно):
- О!!! Я буду горячо молиться, чтобы Бог вернул им зрение!!
Bрач (виновато):
- Я знаком с одним из лучших офтальмологов мира. Может, он сможет...
Программист (небрежно):
- А че они ночью не играют!
|
- Для проигрывания звукового файла используйте непосредственно функцию
sndPlaySound().
- Считывайте звуковой файл в память, затем для его проигрывания используйте
sndPlaySound()
- Используйте sndPlaySound для непосредственного проигрывания звуковых файлов,
расположенных в файлах ресурсов, прилинкованных к вашему приложению.
- Считывайте звуковой файл, располагаемый в файле ресурса, прилинкованному к
вашему приложению, в память, и затем для его проигрывания используйте
sndPlaySound().
Для построения проекта вам понадобиться:
- Создайте звуковой файл с именем 'hello.wav' в каталоге проекта.
- Создайте текстовый файл с именем 'snddata.rc' в каталоге проекта.
- Добавьте следующую строку к файлу 'snddata.rc': HELLO WAVE hello.wav
- В dos-сессии перейдите в ваш каталог приложения и скомпилируйте .rc-файл,
используя компилятор ресурсов Borland (brcc32.exe): введите путь к brcc32.exe и
передайте 'snddata.rc' в качестве параметра.
Пример:
bin\brcc32 snddata.rc
Это создаст файл 'snddata.res', который Delphi слинкует с EXE-файлом вашего
приложения.
Далее приведен необходимый вам код:
unit PlaySnd1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics,
Controls, Forms, Dialogs, StdCtrls;
type
TForm1 = class(TForm)
PlaySndFromFile: TButton;
PlaySndFromMemory: TButton;
PlaySndbyLoadRes: TButton;
PlaySndFromRes: TButton;
procedure PlaySndFromFileClick(Sender: TObject);
procedure PlaySndFromMemoryClick(Sender: TObject);
procedure PlaySndFromResClick(Sender: TObject);
procedure PlaySndbyLoadResClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
{$R snddata.res}
uses MMSystem;
procedure TForm1.PlaySndFromFileClick(Sender: TObject);
begin
sndPlaySound('hello.wav', SND_FILENAME or SND_SYNC);
end;
procedure TForm1.PlaySndFromMemoryClick(Sender: TObject);
var
f: file;
p: pointer;
fs: integer;
begin
AssignFile(f, 'hello.wav');
Reset(f, 1);
fs := FileSize(f);
GetMem(p, fs);
BlockRead(f, p^, fs);
CloseFile(f);
sndPlaySound(p, SND_MEMORY or SND_SYNC);
FreeMem(p, fs);
end;
procedure TForm1.PlaySndFromResClick(Sender: TObject);
begin
PlaySound('HELLO', hInstance, SND_RESOURCE or SND_SYNC);
end;
procedure TForm1.PlaySndbyLoadResClick(Sender: TObject);
var
h: THandle;
p: pointer;
begin
h := FindResource(hInstance, 'HELLO', 'WAVE');
h := LoadResource(hInstance, h);
p := LockResource(h);
sndPlaySound(p, SND_MEMORY or SND_SYNC);
UnLockResource(h);
FreeResource(h);
end;
end.
|
|