金笛工业手机论坛  

返回   金笛工业手机论坛 > 开发者乐园 > 短信开发资料

短信开发资料 短信开发技巧,代码分析

回复
 
LinkBack 主题工具 显示模式
旧 2009-10-29   #1 (permalink)
高级会员
 
注册日期: 2009-07-09
住址: 亦庄经济开发区2号院大族广场1502
帖子: 537
susu8988 正向着好的方向发展
默认 delphi实现音频传输

语音聊天在今天是一个很普通的话题,小厮写了一段音频采集、网络传输和播放的程序,实现和简单的语音聊天,但是语音信息没有经过很好的压缩,所以,在局域网外,由于网速问题,效果可能不会很理想
下面我们切入正题。小厮使用的是ACM组件,ACMWaveOut——播放ACMWaveIn——采集ACMDialog——音频格式设置
客户端:定义一个开始按钮,设置音频格式procedure TForm1.Button1Click(Sender: TObject);
var
formatointer;
beginidudpclient1.Host :='127.0.0.1';
idudpclient1.Port :=8000;
format:=ACMDialog1.OpenDialog;
if format=nil then exit; idudpclient1.Active :=true;
ACMWaveIn1.Open(format);
end;
有声音输入时,触发ACMWaveIn1Data事件,在此事件中,发送音频数据。因为在ACMWaveIn、ACMWaveOut组件中data均类型为pchar,所以在发送和接受过程中要适当的进行类型转换,以确保类型正确。
procedure TForm1.ACMWaveIn1Data(data: Pointer; size: Integer);
var
pchDataChar;
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; 服务器端:设定UDPServer监听8000端口,同时设置音频格式 procedure TForm1.Button1Click(Sender: TObject);var
formatointer;
beginidudpserver1.DefaultPort :=8000;
idudpserver1.Active :=true;
format:=ACMDialog1.OpenDialog;
if format=nil then exit;
ACMWaveOut1.Open(format);
end;UDPServer受到数据时,触发事件UDPRead,在此事件中,调用ACMWaveOut,播放语音数据。
procedure TForm1.IdUDPServer1UDPRead(Sender: TObject; AData: TStream;
ABinding: TIdSocketHandle);
var
a:array of char;
s:string;
pcharplaystrchar;
begin
SetLength(a,AData.Size);
AData.ReadBuffer(A[0],AData.Size);
s:=PChar(@A[0]);
pcharplaystr:=pchar(s);
ACMWaveOut1.PlayBack(pcharplaystr,AData.Size); //播放接收到的数据
end; 其实,数据类型转换的代码有很多种写法,但结果应该是相同的,还有这一段,也可以实现var
recData:string;
pcharplaystrchar;
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;
__________________
地址:北京亦庄经济技术开发区荣华南路10号院5号楼705

电话:010-82356575/76/77转6070 联系人:苏秋英

手机微信同号:13811870548 QQ: 1170923055
susu8988 当前离线   回复时引用此帖
回复

书签


当前查看此主题的会员: 1 (0 位会员和 1 位游客)
 

发帖规则
不可以发表新主题
不可以发表回复
不可以上传附件
不可以编辑自己的帖子

启用 BB 代码
论坛启用 表情符号
论坛启用 [IMG] 代码
论坛禁用 HTML 代码
Trackbacks are 启用
Pingbacks are 启用
Refbacks are 启用



所有时间均为北京时间。现在的时间是 18:26


Powered by vBulletin® 版本 3.8.3
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.