procedure TACMWaveOut.PlayBack(data:pointer;size:longint);
var
  Header:PWaveHdr;
  memblock:pointer;
  i:integer;
begin
  if HWaveOut1<>nil then
  begin
    header:=new(PWaveHdr);
    memblock:=new(pointer);
    getmem(memblock,size);
    move(data^,memBlock^,size);
    header.lpdata:=memBlock;
    header.dwbufferlength:=size;
    header.dwbytesrecorded:=size;
    header.dwUser:=0;
    header.dwflags:=0;
    header.dwloops:=0;
    i:=WaveOutPrepareHeader(HWaveOut1^,header,sizeof(TWaveHdr));
    if i<> 0 then showmessage('WaveOutPrepareHeader error');
    i:=WaveOutWrite(HWaveOut1^,header,sizeof(TWaveHdr));
    if i<> 0 then showmessage('WaveOutWrite error');
  end;
end;