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

📄 unit1.pas

📁 语音acm控件
💻 PAS
字号:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  ACMOut, ACMIn, ACMConvertor, StdCtrls, ComCtrls, ExtCtrls;

type
  TForm1 = class(TForm)
    ACMConvertor1: TACMConvertor;
    ACMIn1: TACMIn;
    ACMOut1: TACMOut;
    Button1: TButton;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    ProgressBar1: TProgressBar;
    Memo1: TMemo;
    Label4: TLabel;
    Label5: TLabel;
    Bevel1: TBevel;
    procedure ACMIn1BufferFull(Sender: TObject; Data: Pointer;
      Size: Integer);
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  PCMFormat:TACMWaveFormat;
  GSM610Format:TACMWaveFormat;

implementation

{$R *.DFM}

procedure TForm1.ACMIn1BufferFull(Sender: TObject; Data: Pointer;
  Size: Integer);
  var
  i,max,min:integer;
  cData:Array [0..10000] of byte;
  OutSize:Integer;
begin

acmconvertor1.open(Data,size);

OutSize:=ACMConvertor1.Convert ;

label1.Caption :='PCM Buffer Size:'+inttostr(Outsize) ;
label2.Caption :='GSM Buffer Size:'+inttostr(acmconvertor1.inputBufferSize);

ACMout1.Play(acmconvertor1.BufferOut,ACMconvertor1.OutputBufferSize);

move(acmconvertor1.BufferOut^,cData, ACMconvertor1.OutputBufferSize);
 max:=0;min:=1000;
for  i:=0 to (ACMconvertor1.OutputBufferSize -1) do
begin
  if (cdata[i]>max)  then max:= cdata[i];
  if (cdata[i]<Min)  then min:=cdata[i];
  Progressbar1.Position :=max-129;
end;
label3.Caption :='Audio Level Scope:'+inttostr(max)+'<-->'+inttostr(min);;


end;

procedure TForm1.FormCreate(Sender: TObject);
var format:pointer;
begin

  with GSM610Format.Format  do
  begin
     wFormatTag:=$31;
     nChannels:=1;
     wBitsPerSample:=0;
     nSamplesPerSec:=8000;
     nBlockAlign:=65;
     nAvgBytesPerSec:=1625;
     cbSize:=2;
    // wSamplesPerBlock:=$140;
  end;
  GSM610Format.RawData[18]:=$40;
  GSM610Format.RawData[19]:=$1;

  with PCMFormat.Format  do
  begin
     wFormatTag:=$1;
     nChannels:=1;
     wBitsPerSample:=8;
     nSamplesPerSec:=8000;
     nBlockAlign:=1;
     nAvgBytesPerSec:=8000;
     cbSize:=0;
   end;

  ACMOut1.Open(PCMformat);
  ACMIN1.Open (GSM610Format);
  ACMConvertor1.FormatIn:=GSM610Format;
  ACMConvertor1.FormatOut :=PCMFormat;
 //ACMConvertor1
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
close;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
ACMConvertor1.Close ;
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -