📄 unit1.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 + -