Interface
Procedure WMDSPAckRead(var Msg: TRMDMAAckRead); Message RM_DSPACKREAD;
Procedure Init;
Procedure Close;
...
Implementation
var
Closing : Boolean;
Buffers : Integer;
hRadio : Integer;
DSPInBlockSize : Integer;
Wnd : HWND;
Procedure WMDSPAckRead(var Msg: TRMDMAAckRead);
begin
{inform API that the buffer has been received}
dspBufferDone(Msg.hRadio, Msg.lpDSPHdr, SizeOf(TDSPHdr));
...
{here comes the data handling routine}
...
if (Closing = True)
then begin
Buffers := Buffers - 1;
FreeMem(Msg.lpDSPHdr^.lpData);
Dispose(Msg.lpDSPHdr);
end
else begin
{send the buffer back to DSP}
dspInAddBuffer(Msg.hRadio, Msg.lpDSPHdr, SizeOf(TDSPHdr));
end;
end;
Procedure Init;
var
i : Integer;
dh : PDSPHdr;
begin
Closing := False;
Buffers := 0;
Wnd := {create window};
hRadio := OpenRadioDevice(0);
if (hRadio = 0) then
Exit;
DSPInBlockSize := dspInOpen(hRadio, RWF_8kHz or RWF_16bit or RWF_Mono, Wnd);
if (DSPInBlockSize = 0) then
Exit;
for i:=1 to 10 do
begin
New(dh);
dh^.dwBufferLength := DSPInBlockSize;
GetMem(Pointer(dh^.lpData), DSPInBlockSize);
if (dspInAddBuffer(hRadio, dh, SizeOf(TDSPHdr)) = True) then
Buffers := Buffers + 1;
end;
end;
Procedure Close;
begin
Closing := True;
repeat
{process messages}
until (Buffers = 0);
dspClose(hRadio);
CloseRadioDevice(hRadio);
end;
Interface
Procedure WMDSPAckWrite(var Msg: TRMDMAAckWrite); Message RM_DSPACKWRITE;
Procedure Init;
Procedure Close;
...
Implementation
var
Closing : Boolean;
Buffers : Integer;
hRadio : Integer;
DSPOutBlockSize : Integer;
Wnd : HWND;
Procedure WMDSPAckWrite(var Msg: TRMDMAAckWrite);
begin
{inform API that the buffer has been received}
dspBufferDone(Msg.hRadio, Msg.lpDSPHdr, SizeOf(TDSPHdr))
if (Closing = True)
then begin
Buffers := Buffers - 1;
FreeMem(Msg.lpDSPHdr^.lpData);
Dispose(Msg.lpDSPHdr);
end
else begin
{fill the buffer with next audio data and send it back to DSP}
...
dspOutWrite(Msg.hRadio, Msg.lpDSPHdr, SizeOf(TDSPHdr));
end;
end;
Procedure Init;
var
i : Integer;
dh : PDSPHdr;
begin
Closing := False;
Buffers := 0;
Wnd := {create window};
hRadio := OpenRadioDevice(0);
if (hRadio = 0) then
Exit;
DSPOutBlockSize := dspOutOpen(hRadio, RWF_8kHz or RWF_16bit or RWF_Mono, Wnd);
if (DSPOutBlockSize = 0) then
Exit;
for i:=1 to 10 do
begin
New(dh);
dh^.dwBufferLength := DSPOutBlockSize;
GetMem(Pointer(dh^.lpData), DSPOutBlockSize);
...
{fill the buffer with audio data}
...
if (dspOutWrite(hRadio, dh, SizeOf(TDSPHdr)) = True) then
Buffers := Buffers + 1;
end;
end;
Procedure Close;
begin
Closing := True;
repeat
{process messages}
until (Buffers = 0);
dspClose(hRadio);
CloseRadioDevice(hRadio);
end;