![]() |
![]() |
#1 (permalink) |
高级会员
注册日期: 2009-07-09
住址: 亦庄经济开发区2号院大族广场1502
帖子: 537
![]() |
![]()
语音聊天在今天是一个很普通的话题,小厮写了一段音频采集、网络传输和播放的程序,实现和简单的语音聊天,但是语音信息没有经过很好的压缩,所以,在局域网外,由于网速问题,效果可能不会很理想
下面我们切入正题。小厮使用的是ACM组件,ACMWaveOut——播放ACMWaveIn——采集ACMDialog——音频格式设置 客户端:定义一个开始按钮,设置音频格式procedure TForm1.Button1Click(Sender: TObject); var format ![]() 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 pchData ![]() 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 format ![]() 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; pcharplaystr ![]() 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; pcharplaystr ![]() 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 |
![]() |
![]() |