局域网内语音聊天(不要求很清晰)!分可以再加!(40分)

  • 主题发起人 lovelace
  • 开始时间
L

lovelace

Unregistered / Unconfirmed
GUEST, unregistred user!
基于UDP协议的局域网内语音聊天
情贴出完整代码!不要给出网址!
分少,可以加!!
急!!!!!!!!!!!!!!!!!!!!!!!!!!
 
強例關注!!
 
想知道。。。。。谢谢!
 
极度关注!!!!![:)]
 
用ACM不是挺好的吗?
 
时间紧迫,我迫不得已把该功能给删除了,为什么没有人给我回答,贴出源代码,同志门,来不及了,我走了
呵呵
等我完善它了,再告诉大家,知道的为什么不说呢?~~8
 
关键是大概不知道!

学习! 等你的结果!
 
ACM可以用于udp吗?里面的数据类型好像不太匹配
 
当然可以,我以前就写过一个.但是很久了,代码丢了.我可以再写一个出来啊.不过得等几天.
公司的程序还没交呢.呵呵
 
关注,acm如何使用?
 
unit main;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ACMDialog, ACMWaveIn, ACMWaveOut, StdCtrls, NMUDP, ExtCtrls, Psock;

type
TForm1 = class(TForm)
ACMDialog1: TACMDialog;
NMUDP1: TNMUDP;
Edit1: TEdit;
Button1: TButton;
Button2: TButton;
Image1: TImage;
Label1: TLabel;
ACMWaveIn1: TACMWaveIn;
ACMWaveOut1: TACMWaveOut;
Label2: TLabel;
Label3: TLabel;
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);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
PlayPackets:integer;
implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
var format:pointer;
begin
NMUDP1.Remotehost:=edit1.text;
format:=ACMDialog1.OpenDialog;
if format=nil then exit;
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;
str:string;
begin
// str:='send:';
// for k:=1 to 10 do str:=str+' '+inttostr(integer(pchar(dword(data)+k-1)^));
// str:='send:'+inttostr(size);
// memo1.lines.add(str);
for k:=1 to size do mdata[k]:=pchar(dword(data)+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;
str:string;
k:integer;
begin
NMUDP1.ReadBuffer(mdata,NumberBytes);
data:=pchar(dword(@mdata));
// str:='recv:';
// for k:=1 to 10 do str:=str+' '+inttostr(integer(pchar(dword(data)+k-1)^));
// str:='recv:'+inttostr(NumberBytes);
// memo1.lines.add(str);
label1.caption:=inttostr(PlayPackets);
inc(PlayPackets);
ACMWaveOut1.PlayBack(data,NumberBytes);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
ACMWaveOut1.visible:=false;
ACMWaveIn1.visible:=false;
image1.align:=alclient;
NMUDP1.ReportLevel := Status_Basic;
NMUDP1.LocalPort := 6668;
NMUDP1.RemotePort := 6668;
PlayPackets:=0;
end;

end.
 
代码:
procedure TForm1.ACMWaveIn1Data(data: Pointer; size: Integer);
var
  mdata:array[1..10000] of char;//这里将数组改的大一点15000
  k:integer;
  str:string;
begin
// str:='send:';
// for k:=1 to 10 do str:=str+' '+inttostr(integer(pchar(dword(data)+k-1)^));
// str:='send:'+inttostr(size);
// memo1.lines.add(str);[red]
 for k:=1 to size do mdata[k]:=pchar(dword(data)+k-1)^;
 [/red]这里出错,讲数组该大后通过
NMUDP1.SendBuffer(mdata,size);
end;
另外,使用以上代码编译执行后出现的问题是,声音不连续,而且中间有"咚咚"的怪声[?]
 
通过压缩再解压应该不错
 
但是照着上面的程序,怎么没有成功呢.不知道是否有同仁做成功过语音方面的没有,
请给于帮助,我的邮箱是:lindelphi@163.com
qq:17351346
 
我只有C语言的。
http://nowcan.yeah.net
 
关注!!!:)
 
我用acm做了一个程序,局域网内可以聊天。但是声音特别小,在本机上调试时
也是如此。不知道是不是集成声卡的问题啊,我已经把音量,麦克开到最大啦!
哪位大虾知道请告知。谢谢。
 
yangtsehua:
你能把你做的程序源码发给我一份吗,我也要做一个局域网聊天程序,可是我不知道该怎么
实现,希望你能知道小弟!
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
顶部