现在的位置: 首页 > 综合 > 正文

基于Internet的语音聊天软件设计与实现

2013年10月03日 ⁄ 综合 ⁄ 共 4345字 ⁄ 字号 评论关闭
 

基于Internet的语音聊天软件设计与实现

朱国华,夏敏捷 

(中原工学院 计算机科学系 ,河南 郑州 450007

摘要:文章对网络环境下语音通信的原理进行了系统地分析,详细阐述了语音的采集、语音数据的压缩和解压缩、语音数据的传输等关键性技术和Delphi6实现语音软件的开发过程,并给出了相应的简单实例。

关键词:语音通信; Delphi6ACMCodecs

 

随着网络技术的迅速发展,基于网络的各种多媒体音频和视频传输技术开始得到广泛的应用,以IP电话业务为代表的网络音频传输技术在现阶段已经得到成功的运营。网络语音传输的基本原理是对模拟语音信号经过模数转换,进行编码压缩后,按一定的打包规则将压缩帧转换成IP数据包通过数据网进行传输,在目的地经过数据解压、数模转换复原成话音,从而达到语音通信的目的。

1  网络语音通信关键技术

网络语音传输总的目的是既要保证通话服务质量QoS,又要尽可能的减少带宽资源。整个语音传输的过程[1]为:发话方首先采集声卡语音,将模拟信号转换为数字数据,存入计算机内存中,再通过语音压缩算法的运算将数据进行压缩,最后打包成IP数据包发送出去。接收方接收到IP数据包,首先解析IP数据,接着采用解压缩算法将数据进行解压缩,然后通过将解压缩后的数字数据转换为模拟信号。

在这一流程中,语音的采集、数据的压缩和解压缩、数据的传输都是关键的技术。

1.1语音的采集

采样率的大小直接决定语音的清晰度和采集的原始数字数据量的大小。语音的采集和播放的原理一致,前者是进行A/D转换,后者是D/A转换。语音采集的原理是通过在离散的时间间隔采样原始声音并记录每次采样的数字来表示和重建声音波形的技术来实现的。采集的声音数据的格式有很多标准,软件的设计中一般采用波形数据的格式[2]WAVE_FORMAT_PCMWAVE_FORMAT_DRMWindows API函数中支持波形数据采样的两种格式。很多程序中采用WAVE_FORMAT_PCM,即PCM(脉冲编码调制)格式,其采样率可以为8KHZ11.025KHZ22.05KHZ441.KHZ。如果设置单声道,采样率为8KHZ,每个采样值为16位,那么采集后的数字语音数据为16kB/s

1.2 语音数据的压缩

语音通信的重要问题之一就是尽可能提高压缩编码的比特率。音频数据一般具有较高的采样速率,如果不经过压缩的话,保存它们需要消耗大量的存贮空间,在网络上进行传输的效率也很低。采用什么样的压缩算法决定了压缩率的大小,这也是整个网络语音通信技术的核心和最关键的技术之一。因此音频数字压缩编码在语音通信中占有很重要的地位。目前常用的压缩方法有很多种,不同的方法具有不同的压缩比和还原音质,编码的格式和算法也各不相同,其中某些压缩算法相当复杂,普通程序不可能去实现其编解码算法。

所幸的是,Windows9x/NT4.0/Windows2000为多媒体应用程序提供了强大的支持,引入了多媒体功能的接口函数库ACM[3](Audio Compression Manager,音频压缩管理器),它负责管理系统中所有音频编解码器(Coder-Decoder简称Codecs,是实现音频数据编解码的驱动程序),应用程序可以通过ACM提供的编程接口调用这些系统中现成的编解码器来实现音频数据的压缩和解压缩,这一类函数和结构的名字一般都以“ACM”作为前缀。

Delphi6开发音频压缩的程序中,其相应的API声明单元为MSASM.pas。语音压缩的程序中,音频压缩管理器控件组包括TACMWaveInTACMDialogTACMWaveOut这三个控件。程序员可在相应的网站(如:http://mmcomm.myrice.com/controls/ACM.zip)获得这些控件。TACMDialog该控件可以用来指定音频数据的输入输出格式,用户既可在设计过程中设定音频数据的输入输出格式,也可在程序运行时由对话框调整这些参数。TACMWaveIn控件用于从麦克风接受音频数据,TACMWaveOut控件用于声音的回放,这个控件的音频数据缓冲区大小属性Numbuffers用于指定播放前使用的缓冲区数,这对于流量不稳定的网络的音频传输显得非常重要,它可以缓冲连接的波动数据而输出稳定的不间断的声音。

Windows9x/NT/2000/XP系统自带的音频Codecs支持一些音频数据压缩标准,如Microsoft AD-PCM(IMA)ADPCMDSPGroupTrueSpeech(TM)等。从压缩率来看,MSADPCMIMAADPCM都是4:1MSGSM6.102:1,而DSPGroupTrueSpeech(TM)则达到了10:1。从还原后的效果来看,应该MSGSM6.10比较好,而且它支持比较高的采样频率,但它的压缩率太小。

1.3 语音传输实现

本系统采用基于SocketUDP协议通信,它作为一个无连接的协议,只是简单地将数据放在端口中,不在发送和接受方之间建立一个连接。这种数据传输方式的安全性较差些,但程序运行过程的鲁棒性要强许多。这里使用Delphi6NMUDP控件来传输音频数据,发送报文的任务由Sendbuffer方法或者Sendstream完成,它负责完成由TACMWaveIn控件获取的并经控件转换的压缩音频数据的发送。而在它接受到一个报文时,将触发DataReceived事件,在此事件函数中,调用Readbuffer或者ReadStream来读取报文的数据,并将这些数据经解压后由TACMWaveOut控件加以播放。

TACMWaveIn控件的ondata事件,是当数据满了就会发生这个事件。在这个事件里调用NMUDP控件的Sendstream方法把数据发送出去。NMUDP控件DataReceived事件,是当数据到达时就会发生。在这个事件里调用TACMWaveOut.play(buf,size)播放语音流。

2  程序设计实现

基于以上方法,笔者成功地开发了语音聊天测试软件。该软件平台为;硬件平台为含全双工声卡、麦克风和音响的多媒体PC;开发工具为Delphi6。下面介绍具体的开发过程:

新建一个工程,对于TACMWaveInTACMDialogTACMWaveOut这三个控件,单击“Componet”→“install component.→分别选择相应的下载的PAS控件文件→“OK”;安装上这三个控件。在窗体(如图1)上添加相应控件,注意上述的三个控件在Milos面板上。


1 语音聊天测试软件界面

uses  winsock;//add

procedure TForm1.ACMWaveIn1Data(data: Pointer; size: Integer);//接受麦克风语音

var pchData:pChar;

      myStream:TMemoryStream;

begin

   pchData:=pchar(data);

   if pchData[1]='' then exit;

   myStream:=TMemoryStream.Create;

   try

   myStream.Write(pchData^,size);

   nmudp1.sendstream(mystream);

   finally

   myStream.Free;

   end;

end;

procedure TForm1.NMUDP1DataReceived(Sender: TComponent;

  NumberBytes: Integer; FromIP: String; Port: Integer);//语音数据传输到对方时产生

var mystream:TMemoryStream;

   recData:string;

   pcharplaystr:pchar;

begin

  myStream:=TMemoryStream.create;

  try

  nmUdp1.ReadStream(myStream);

  Setlength(recdata,NumberBytes);

  myStream.Read(recdata[1],NumberBytes); //将流转换成字符串

  pcharplaystr:=pchar(recData);

  ACMWaveOut1.PlayBack(pcharplaystr,NumberBytes);   //播放接收到的数据

  StatusBar1.SimpleText:=inttostr(n)+'收到来自'+FromIP+'端口'+inttostr(port);

  finally

  myStream.free;

  end;

 end;

………………………

end.

以上程序系统在两台PC上运行,通过输入对方的IP和选择不同的端口,就可以通过麦克风实现语音对话了。

3结束语

该系统利用了ACM技术,使得音频信号经过模数转换后也可以作为分组数据在互联网上传递,实现语音对话功能,扩展了互联网的应用。在语音通信中延时的情况仍需要进一步改进。

作者简介:朱国华(1951-),男(汉族),江苏无锡人,副教授。

 

参考文献

[1]李宁溪,张峡. 基于LAN的语音通讯软件设计[J]. 计算机工程与应用2003(4)137-139.

[2]施寒潇,朱巧明,吕强.基于Internet的语音交互系统的设计和实现[J]. 通信技术与设备.2002(3):33-37.

[3]蒋先刚,涂晓斌,陈海雷.网上语音数据传输的Delphi实现技术[J].华东交通大学学报.2002(9) :44-48.

 

Design and Implementation of Voice Communication Based on Internet

Zhu GuoHuaXia Minjie

(Zhongyuan Institute of Technology, ZhengZhou 450007,China)

Abstract: The paper makes a deeply and systematic analysis of the principle about voice communication on network, and explains voice collection, compress and decompress, transmission and so on. It elaborates on the process about the Delphi software development and gives a simple instance of the voice communication.

Keywords: Voice communication; Delphi6;ACM;Codecs

抱歉!评论已关闭.