Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.02.06;
Скачать: CL | DM;

Вниз

Работа с waveOut   Найти похожие ветки 

 
Il'ya   (2003-09-28 13:47) [0]

Люди, подскажите как правильно работать с waveOut, желательно на примере (допустим как проиграть wav-файлик через waveOut).


 
Mihey ©   (2003-09-28 20:08) [1]

Пробуй ссылку (открывается, но медленно):
http://delphiworld.narod.ru/base/audio_example.html


 
misterix   (2003-10-07 12:00) [2]

unit WaveLoaderUnit;

interface

uses
Windows, Messages, SysUtils, Classes, MMSystem;

function LoadWaveFile( AFileName: String;
var Format: PWaveFormatEx;
var Size: DWORD;
var Data: Pointer): Boolean;

implementation

function LoadWaveFile( AFileName: String;
var Format: PWaveFormatEx;
var Size: DWORD;
var Data: Pointer): Boolean;
var
mmioHandle: HMMIO;
mmRIFFInfo: TMMCKINFO;
mmChunkInfo: TMMCKINFO;
mmRes: MMRESULT;
BytesRead: DWORD;
begin
Result := False;

mmioHandle := mmioOpen(PChar(AFileName),nil,MMIO_READ or MMIO_ALLOCBUF);

if not Boolean(mmioHandle) then exit;

mmRIFFInfo.fccType := $45564157; // "WAVE"
mmRes := mmioDescEnd(mmioHandle,@mmRIFFInfo,nil,MMIO_FINDRIFF);

if mmRes <> MMSYSERR_NOERROR then exit;

mmChunkInfo.ckid := $20746D66; // "fmt "
mmRes := mmioDescEnd(mmioHandle,@mmChunkInfo,@mmRIFFInfo,MMIO_FINDCHUNK);

if mmRes <> MMSYSERR_NOERROR then exit;

BytesRead := mmioRead(mmioHandle,PChar(Format),SizeOf(Format^));

if BytesRead = - 1 then exit;

mmRes := mmioAscEnd(mmioHandle,@mmChunkInfo,0);

if mmRes <> MMSYSERR_NOERROR then exit;

mmChunkInfo.ckid := $61746164; // "data"
mmRes := mmioDescEnd(mmioHandle,@mmChunkInfo,@mmRIFFInfo,MMIO_FINDCHUNK);

if mmRes <> MMSYSERR_NOERROR then exit;

Size := mmChunkInfo.cksize;

try
GetMem(Data,Size);
except
on EOutOfMemory do
Exit;
end;

BytesRead := mmioRead(mmioHandle,PChar(Data),Size);

if BytesRead = - 1 then exit;

mmioClose(mmioHandle,0);

Result := True;
end;

end.

//////////////////////////////////////////////////////////////

unit Main;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, WaveLoaderUnit, MMSystem;

type
TWaveFile = class
private
FFormat: PWaveFormatEx;
FSize: Integer;
FData: Pointer;
FFileName: String;
procedure SetFileName(Value: String);
public
constructor Create;
destructor Destroy; override;
property FileName: String read FFileName write SetFileName;
property Format: PWaveFormatEx read FFormat;
property Size: Integer read FSize;
property Data: Pointer read FData;
end;

TMainFrm = class(TForm)
Open: TButton;
OpenDialog1: TOpenDialog;
procedure OpenClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
procedure WaveOutMess(var msg: TMessage); message MM_WOM_DONE;
end;

var
MainFrm: TMainFrm;
WaveFile: TWaveFile;
WaveHdr: PWaveHdr;
WaveOut: HWAVEOUT;

implementation

{$R *.DFM}

procedure TWaveFile.SetFileName(Value: String);
begin
if Assigned(FData) then begin
FreeMem(FData);
FData := nil;
end;

if LoadWaveFile(Value,FFormat,FSize,FData) then
FFileName := Value
else
FFileName := "";
end;

constructor TWaveFile.Create;
begin
Inherited;
New(FFormat);
end;

destructor TWaveFile.Destroy;
begin
if Assigned(FData) then begin
FreeMem(FData);
FData := nil;
end;
Dispose(FFormat);
Inherited;
end;

procedure TMainFrm.FormCreate(Sender: TObject);
begin
WaveFile := TWaveFile.Create;
end;

procedure TMainFrm.FormDestroy(Sender: TObject);
begin
WaveFile.Free;
end;

procedure TMainFrm.WaveOutMess(var msg: TMessage);
begin
waveoutUnPrepareHeader(msg.WParam,Pointer(msg.LParam),SizeOf(TWaveHdr));
Dispose(Pointer(msg.LParam));
waveoutClose(msg.WParam);
Open.Enabled := True;
end;

procedure TMainFrm.OpenClick(Sender: TObject);
var
mmRes: MMRESULT;
begin
if OpenDialog1.Execute then begin

WaveFile.FileName := OpenDialog1.FileName;

if Boolean(WaveFile.Data) then begin
mmRes := waveoutOpen(@WaveOut,0,WaveFile.Format,
Handle,0,CALLBACK_WINDOW);

if mmRes <> MMSYSERR_NOERROR then begin
ShowMessage("



Страницы: 1 вся ветка

Текущий архив: 2004.02.06;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.019 c
1-16390
vlv
2004-01-23 13:17
2004.02.06
Как преобразовать scan-код клавиши в символ?


1-16397
Yegorchic
2004-01-22 20:16
2004.02.06
MDIForm ы


3-16182
Максим
2004-01-13 08:22
2004.02.06
Создание базы


14-16734
de_ICER-T44
2004-01-16 10:14
2004.02.06
Задачка для профи


1-16426
WED
2004-01-20 10:14
2004.02.06
Почему не работает следующий код...