局域网内实现点对点语音传输 介绍点资料或者电子书,有源码最好,小弟多谢了! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 unit main;interfaceuses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, ACMWaveIn, ACMWaveOut, StdCtrls, NMUDP, ExtCtrls;type TForm1 = class(TForm) NMUDP1: TNMUDP; Button1: TButton; Button2: TButton; Image1: TImage; Label1: TLabel; ACMWaveIn1: TACMWaveIn; ACMWaveOut1: TACMWaveOut; Label3: TLabel; Label4: TLabel; Label5: TLabel; RAddress: TEdit; Edit1: TEdit; Label6: TLabel; Label7: TLabel; cMode: TRadioGroup; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure ACMWaveIn1Data(data: Pointer; size: Integer); procedure NMUDP1DataReceived(Sender: TComponent; NumberBytes: Integer; FromIP: String; Port: Integer); procedure FormCreate(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure cModeClick(Sender: TObject); private { Private declarations } public { Public declarations } end; TGSM610=packed record wFormatTag: Word; { format type } nChannels: Word; { number of channels (i.e. mono, stereo, etc.) } nSamplesPerSec: DWORD; { sample rate } nAvgBytesPerSec: DWORD; { for buffer estimation } nBlockAlign: Word; { block size of data } wBitsPerSample: Word; { number of bits per sample of mono data } cbSize: Word; { the count in bytes of the size of } wSamplesPerBlock:word; end;var Form1: TForm1; PlayPackets,ErrorPackets:integer; format:pointer; gsm610:TGSM610;implementation{$R *.DFM}procedure TForm1.Button1Click(Sender: TObject);begin NMUDP1.Remotehost:=RAddress.text; ACMWaveIn1.Num:=strtoint(edit1.text); edit1.text:=inttostr(ACMWaveIn1.Num); with gsm610 do begin wFormatTag:=$31; nChannels:=1; wBitsPerSample:=0; nSamplesPerSec:=8000; nBlockAlign:=65; nAvgBytesPerSec:=1625; cbSize:=2; wSamplesPerBlock:=$140; end; format:=@gsm610; ACMWaveOut1.Open(format); ACMWaveIn1.Open(format); Button1.Enabled:=false; Button2.Enabled:=true;end;procedure TForm1.Button2Click(Sender: TObject);begin ACMWaveIn1.Close; ACMWaveOut1.Close; Button1.Enabled:=true; Button2.Enabled:=false;end;procedure TForm1.ACMWaveIn1Data(data: Pointer; size: Integer);var mdata:array[1..10000] of char; k:integer;begin for k:=1 to size do mdata[k]:=pchar(dword(data)+dword(k-1))^; NMUDP1.SendBuffer(mdata,size);end;procedure TForm1.NMUDP1DataReceived(Sender: TComponent; NumberBytes: Integer; FromIP: String; Port: Integer);var mdata:array[1..10000] of char; data:Pchar;begin NMUDP1.ReadBuffer(mdata,NumberBytes); data:=pchar(dword(@mdata)); label1.caption:='Packets:'+inttostr(PlayPackets); inc(PlayPackets); if NumberBytes=-1 then inc(ErrorPackets) else ACMWaveOut1.PlayBack(data,NumberBytes); label4.caption:='Errors:'+inttostr(ErrorPackets); label7.caption:='Size:'+inttostr(NumberBytes);end;procedure TForm1.FormCreate(Sender: TObject);begin ACMWaveOut1.visible:=false; ACMWaveIn1.visible:=false; image1.align:=alclient; NMUDP1.ReportLevel := Status_Basic; cModeClick(Sender); PlayPackets:=0;end;procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);begin Button2Click(Sender);end;procedure TForm1.cModeClick(Sender: TObject);begin if cMode.ItemIndex=0 then begin NMUDP1.LocalPort := 6660; NMUDP1.RemotePort := 6660; end; if cMode.ItemIndex=1 then begin NMUDP1.LocalPort := 6661; NMUDP1.RemotePort := 6660; end; if cMode.ItemIndex=2 then begin NMUDP1.LocalPort := 6661; NMUDP1.RemotePort := 6661; end; label5.caption:=inttostr(NMUDP1.RemotePort)+':'+inttostr(NMUDP1.LocalPort);end;end. 用得是acm控件你可以去盒子或是playicq下代码,还有控件这些应该都可以在上面找到 我有源码,且不用第三方控件实现联系:[email protected] 我不用任何组件,连ms media encoder都不调用。:) rzgridS的问题?? 在actionexecute 事件里面设置被操作对象的属性 关于一个类似于dbgird控件的问题 ADODataSet的参数问题 怎么让按回车就相当于点击了‘确定’按钮 各们大侠帮一忙:如何从(DLL、EXE)提取真彩图标而不失真?? 怎样取得工作组中的所有计算机名? delhi用ADO连接加密码的MDB数据库的问题 再问Access加密问题 请教!关于文件复制! 怎样把这个函数写成delphi代码 ??3Q! 动态查询表
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
ACMWaveIn, ACMWaveOut, StdCtrls, NMUDP, ExtCtrls;type
TForm1 = class(TForm)
NMUDP1: TNMUDP;
Button1: TButton;
Button2: TButton;
Image1: TImage;
Label1: TLabel;
ACMWaveIn1: TACMWaveIn;
ACMWaveOut1: TACMWaveOut;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
RAddress: TEdit;
Edit1: TEdit;
Label6: TLabel;
Label7: TLabel;
cMode: TRadioGroup;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure ACMWaveIn1Data(data: Pointer; size: Integer);
procedure NMUDP1DataReceived(Sender: TComponent; NumberBytes: Integer;
FromIP: String; Port: Integer);
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure cModeClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
TGSM610=packed record
wFormatTag: Word; { format type }
nChannels: Word; { number of channels (i.e. mono, stereo, etc.) }
nSamplesPerSec: DWORD; { sample rate }
nAvgBytesPerSec: DWORD; { for buffer estimation }
nBlockAlign: Word; { block size of data }
wBitsPerSample: Word; { number of bits per sample of mono data }
cbSize: Word; { the count in bytes of the size of }
wSamplesPerBlock:word;
end;var
Form1: TForm1;
PlayPackets,ErrorPackets:integer;
format:pointer;
gsm610:TGSM610;implementation{$R *.DFM}procedure TForm1.Button1Click(Sender: TObject);
begin
NMUDP1.Remotehost:=RAddress.text;
ACMWaveIn1.Num:=strtoint(edit1.text);
edit1.text:=inttostr(ACMWaveIn1.Num);
with gsm610 do
begin
wFormatTag:=$31;
nChannels:=1;
wBitsPerSample:=0;
nSamplesPerSec:=8000;
nBlockAlign:=65;
nAvgBytesPerSec:=1625;
cbSize:=2;
wSamplesPerBlock:=$140;
end;
format:=@gsm610;
ACMWaveOut1.Open(format);
ACMWaveIn1.Open(format);
Button1.Enabled:=false;
Button2.Enabled:=true;
end;procedure TForm1.Button2Click(Sender: TObject);
begin
ACMWaveIn1.Close;
ACMWaveOut1.Close;
Button1.Enabled:=true;
Button2.Enabled:=false;
end;procedure TForm1.ACMWaveIn1Data(data: Pointer; size: Integer);
var
mdata:array[1..10000] of char;
k:integer;
begin
for k:=1 to size do mdata[k]:=pchar(dword(data)+dword(k-1))^;
NMUDP1.SendBuffer(mdata,size);
end;procedure TForm1.NMUDP1DataReceived(Sender: TComponent;
NumberBytes: Integer; FromIP: String; Port: Integer);
var
mdata:array[1..10000] of char;
data:Pchar;
begin
NMUDP1.ReadBuffer(mdata,NumberBytes);
data:=pchar(dword(@mdata));
label1.caption:='Packets:'+inttostr(PlayPackets);
inc(PlayPackets);
if NumberBytes=-1 then inc(ErrorPackets)
else ACMWaveOut1.PlayBack(data,NumberBytes);
label4.caption:='Errors:'+inttostr(ErrorPackets);
label7.caption:='Size:'+inttostr(NumberBytes);
end;procedure TForm1.FormCreate(Sender: TObject);
begin
ACMWaveOut1.visible:=false;
ACMWaveIn1.visible:=false;
image1.align:=alclient;
NMUDP1.ReportLevel := Status_Basic;
cModeClick(Sender);
PlayPackets:=0;
end;procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Button2Click(Sender);
end;procedure TForm1.cModeClick(Sender: TObject);
begin
if cMode.ItemIndex=0 then
begin
NMUDP1.LocalPort := 6660;
NMUDP1.RemotePort := 6660;
end;
if cMode.ItemIndex=1 then
begin
NMUDP1.LocalPort := 6661;
NMUDP1.RemotePort := 6660;
end;
if cMode.ItemIndex=2 then
begin
NMUDP1.LocalPort := 6661;
NMUDP1.RemotePort := 6661;
end;
label5.caption:=inttostr(NMUDP1.RemotePort)+':'+inttostr(NMUDP1.LocalPort);
end;
end.
控件
你可以去盒子或是playicq下代码,还有控件这些应该都可以在上面找到