程序代码如下:服务器端
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ACMWaveIn, ACMDialog, ACMWaveOut, IdBaseComponent, IdComponent,
IdUDPBase,IdSocketHandle,IdUDPServer, StdCtrls;type
TForm1 = class(TForm)
IdUDPServer1: TIdUDPServer;
ACMWaveOut1: TACMWaveOut;
ACMDialog1: TACMDialog;
ACMWaveIn1: TACMWaveIn;
Memo1: TMemo;
Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure IdUDPServer1UDPRead(Sender: TObject; AData: TStream;
ABinding: TIdSocketHandle);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}
type
TGSM610=packed record //自定义音频文件头
wFormatTag: Word;
nChannels: Word;
nSamplesPerSec: DWORD;
nAvgBytesPerSec: DWORD;
nBlockAlign: Word;
wBitsPerSample: Word;
cbSize: Word;
wSamplesPerBlock:word;
end;procedure TForm1.FormCreate(Sender: TObject);
var
format: Pointer;
GSM:TGSM610;
begin
with GSM do
begin
wFormatTag:=$31;
nChannels:=1;
wBitsPerSample:=0;
nSamplesPerSec:=8000;
nBlockAlign:=65;
nAvgBytesPerSec:=1625;
cbSize:=2;
wSamplesPerBlock:=$140;
end;
format:=@gsm;
IdUDPServer1.DefaultPort:=8000;
IdUDPServer1.Active:=true;
// if format=nil then exit;
ACMWaveOut1.Open(format);end;procedure TForm1.IdUDPServer1UDPRead(Sender: TObject; AData: TStream;
ABinding: TIdSocketHandle);
var
recData:string;
pcharplaystr:pchar;
myStream:TMemoryStream;
begin
myStream:=TMemoryStream.create;
try
mystream.LoadFromStream(AData);
Setlength(recdata,myStream.Size);
myStream.Position :=0;
myStream.Read(recdata[1],myStream.Size); //数据流转换成字符串
pcharplaystr:=pchar(recData);
ACMWaveOut1.PlayBack(pcharplaystr,AData.Size); //播放接收到的数据
finally
myStream.free;
end;
end;end.
//----------------------客户端如下unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ACMDialog, ACMWaveOut, ACMWaveIn, StdCtrls, IdBaseComponent,
IdComponent, IdTCPConnection, IdTCPClient, IdUDPClient, IdUDPBase,
IdUDPServer;type
TForm1 = class(TForm)
Button1: TButton;
ACMWaveIn1: TACMWaveIn;
ACMWaveOut1: TACMWaveOut;
ACMDialog1: TACMDialog;
IdUDPServer1: TIdUDPServer;
IdUDPClient1: TIdUDPClient;
Edit1: TEdit;
Button2: TButton;
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure Button1Click(Sender: TObject);
procedure ACMWaveIn1Data(data: Pointer; size: Integer);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}type
TGSM610=packed record //自定义音频文件头
wFormatTag: Word;
nChannels: Word;
nSamplesPerSec: DWORD;
nAvgBytesPerSec: DWORD;
nBlockAlign: Word;
wBitsPerSample: Word;
cbSize: Word;
wSamplesPerBlock:word;
end; var
buf: array[0..65535] of byte;
bufsize: Integer = 0;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
idudpclient1.Active:=false;
end;procedure TForm1.Button1Click(Sender: TObject);
var
format: Pointer;
GSM:TGSM610;
begin
with GSM do
begin
wFormatTag:=$31;
nChannels:=1;
wBitsPerSample:=0;
nSamplesPerSec:=8000;
nBlockAlign:=65;
nAvgBytesPerSec:=1625;
cbSize:=2;
wSamplesPerBlock:=$140;
end;
format:=@gsm;
ACMWaveIn1.Open(format);
end; procedure TForm1.ACMWaveIn1Data(data: Pointer; size: Integer);
var
pchData:pChar;
memStream:TMemoryStream;
begin
pchData:=pchar(data);
if pchData[1]='' then exit;
memStream:=TMemoryStream.Create;
try
memStream.Write(pchData^,size);
idudpclient1.SendBuffer(memStream.Memory^,memStream.Size);
finally
memStream.Free;
end;
end;procedure TForm1.Button2Click(Sender: TObject);
begin
IdUDPClient1.Host:=edit1.Text;
IdUDPClient1.Port:=8000;
if not idudpclient1.Active then
idudpclient1.Active:=true;
end;end.怎么就不能发声呢,
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ACMWaveIn, ACMDialog, ACMWaveOut, IdBaseComponent, IdComponent,
IdUDPBase,IdSocketHandle,IdUDPServer, StdCtrls;type
TForm1 = class(TForm)
IdUDPServer1: TIdUDPServer;
ACMWaveOut1: TACMWaveOut;
ACMDialog1: TACMDialog;
ACMWaveIn1: TACMWaveIn;
Memo1: TMemo;
Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure IdUDPServer1UDPRead(Sender: TObject; AData: TStream;
ABinding: TIdSocketHandle);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}
type
TGSM610=packed record //自定义音频文件头
wFormatTag: Word;
nChannels: Word;
nSamplesPerSec: DWORD;
nAvgBytesPerSec: DWORD;
nBlockAlign: Word;
wBitsPerSample: Word;
cbSize: Word;
wSamplesPerBlock:word;
end;procedure TForm1.FormCreate(Sender: TObject);
var
format: Pointer;
GSM:TGSM610;
begin
with GSM do
begin
wFormatTag:=$31;
nChannels:=1;
wBitsPerSample:=0;
nSamplesPerSec:=8000;
nBlockAlign:=65;
nAvgBytesPerSec:=1625;
cbSize:=2;
wSamplesPerBlock:=$140;
end;
format:=@gsm;
IdUDPServer1.DefaultPort:=8000;
IdUDPServer1.Active:=true;
// if format=nil then exit;
ACMWaveOut1.Open(format);end;procedure TForm1.IdUDPServer1UDPRead(Sender: TObject; AData: TStream;
ABinding: TIdSocketHandle);
var
recData:string;
pcharplaystr:pchar;
myStream:TMemoryStream;
begin
myStream:=TMemoryStream.create;
try
mystream.LoadFromStream(AData);
Setlength(recdata,myStream.Size);
myStream.Position :=0;
myStream.Read(recdata[1],myStream.Size); //数据流转换成字符串
pcharplaystr:=pchar(recData);
ACMWaveOut1.PlayBack(pcharplaystr,AData.Size); //播放接收到的数据
finally
myStream.free;
end;
end;end.
//----------------------客户端如下unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ACMDialog, ACMWaveOut, ACMWaveIn, StdCtrls, IdBaseComponent,
IdComponent, IdTCPConnection, IdTCPClient, IdUDPClient, IdUDPBase,
IdUDPServer;type
TForm1 = class(TForm)
Button1: TButton;
ACMWaveIn1: TACMWaveIn;
ACMWaveOut1: TACMWaveOut;
ACMDialog1: TACMDialog;
IdUDPServer1: TIdUDPServer;
IdUDPClient1: TIdUDPClient;
Edit1: TEdit;
Button2: TButton;
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure Button1Click(Sender: TObject);
procedure ACMWaveIn1Data(data: Pointer; size: Integer);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}type
TGSM610=packed record //自定义音频文件头
wFormatTag: Word;
nChannels: Word;
nSamplesPerSec: DWORD;
nAvgBytesPerSec: DWORD;
nBlockAlign: Word;
wBitsPerSample: Word;
cbSize: Word;
wSamplesPerBlock:word;
end; var
buf: array[0..65535] of byte;
bufsize: Integer = 0;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
idudpclient1.Active:=false;
end;procedure TForm1.Button1Click(Sender: TObject);
var
format: Pointer;
GSM:TGSM610;
begin
with GSM do
begin
wFormatTag:=$31;
nChannels:=1;
wBitsPerSample:=0;
nSamplesPerSec:=8000;
nBlockAlign:=65;
nAvgBytesPerSec:=1625;
cbSize:=2;
wSamplesPerBlock:=$140;
end;
format:=@gsm;
ACMWaveIn1.Open(format);
end; procedure TForm1.ACMWaveIn1Data(data: Pointer; size: Integer);
var
pchData:pChar;
memStream:TMemoryStream;
begin
pchData:=pchar(data);
if pchData[1]='' then exit;
memStream:=TMemoryStream.Create;
try
memStream.Write(pchData^,size);
idudpclient1.SendBuffer(memStream.Memory^,memStream.Size);
finally
memStream.Free;
end;
end;procedure TForm1.Button2Click(Sender: TObject);
begin
IdUDPClient1.Host:=edit1.Text;
IdUDPClient1.Port:=8000;
if not idudpclient1.Active then
idudpclient1.Active:=true;
end;end.怎么就不能发声呢,
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货