?? tacmwaveoutunit.pas
字號:
unit TACMWaveOutUnit;
interface
uses
Windows,Classes, IdTCPClient,IdGlobal,ComCtrls,SysUtils,BASE64,MMSystem,
soundout,mixing,soundConverter,headers;
type
TACMWaveOutThread = class(TThread)
private
SysThread:TIdTCPClient;
Acmout1 : Tacmout;
protected
procedure Execute; override;
Public
constructor Create;
destructor Destroy; override;
end;
implementation
uses MainServer;
constructor TACMWaveOutThread.Create;
var
origformat: pWaveFormatEX;
s: array[1..256] of byte;
F: Tacmwaveformat;
begin
inherited Create(True);
SysThread:=TIdTCPClient.Create(nil);
SysThread.RecvBufferSize:=32768;
SysThread.SendBufferSize:=32768;
Acmout1:= Tacmout.Create(nil);
Acmout1.numbuffers := 4;
GetMem(OrigFormat, Sizeof(TACMWaveFormat));
with origformat^ do
begin
wformattag := 49; // gsm 6.10 2kb
nchannels := 1;
nsamplespersec := 8000;
navgbytespersec := 1625;
nblockalign := 65;
wbitspersample := 0;
cbsize := 2;
move(origformat^, s, Sizeof(TACMWaveFormat));
s[18] := 0;
s[19] := 64;
s[20] := 1;
move(s, f.format, sizeof(Tacmwaveformat));
end;
freemem(origformat);
try
Acmout1.Open(f);
except
Acmout1.Close;
end;
FreeOnTerminate:=True;
Suspended := false;
// Priority:=tpIdle;
end;
procedure TACMWaveOutThread.Execute;
var
FileLen,i:integer;
NumRead, NumWritten: Integer;
Request:String;
mdata: array[1..512] of char;
begin
if HgzFsbSDns.ConRpcport(SysThread) then
begin
try
Request:='006';
Request:=EncodeBase64(Request);
SysThread.Write(Request+EOL);
except
SysThread.Free;
Self.Terminate;
exit;
end;
try //循環接收語音
repeat
SysThread.ReadBuffer(mdata,Sizeof(mdata));
Acmout1.Play(@mdata[1],Sizeof(mdata));
until (Terminated=False)and(SysThread.Connected=False);
except
end;
end;
//Acmout1.Free;
SysThread.Disconnect;
SysThread.Free;
Self.Terminate;
end;
destructor TACMWaveOutThread.Destroy;
begin
inherited destroy;
end;
end.
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -