基于Internet的语音聊天软件设计与实现_第1页
基于Internet的语音聊天软件设计与实现_第2页
基于Internet的语音聊天软件设计与实现_第3页
基于Internet的语音聊天软件设计与实现_第4页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、基于internet的语音聊天软件设计与实现朱国华,夏敏捷 (中原工学院 计算机科学系 ,河南 郑州 450007)摘要:文章对网络环境下语音通信的原理进行了系统地分析,详细阐述了语音的采集、语音数据的压缩和解压缩、语音数据的传输等关键性技术和delphi6实现语音软件的开发过程,并给出了相应的简单实例。关键词:语音通信; delphi6;acm;codecs随着网络技术的迅速发展,基于网络的各种多媒体音频和视频传输技术开始得到广泛的应用,以ip电话业务为代表的网络音频传输技术在现阶段已经得到成功的运营。网络语音传输的基本原理是对模拟语音信号经过模数转换,进行编码压缩后,按一定的打包规则将压缩

2、帧转换成ip数据包通过数据网进行传输,在目的地经过数据解压、数模转换复原成话音,从而达到语音通信的目的。1 网络语音通信关键技术网络语音传输总的目的是既要保证通话服务质量qos,又要尽可能的减少带宽资源。整个语音传输的过程1为:发话方首先采集声卡语音,将模拟信号转换为数字数据,存入计算机内存中,再通过语音压缩算法的运算将数据进行压缩,最后打包成ip数据包发送出去。接收方接收到ip数据包,首先解析ip数据,接着采用解压缩算法将数据进行解压缩,然后通过将解压缩后的数字数据转换为模拟信号。在这一流程中,语音的采集、数据的压缩和解压缩、数据的传输都是关键的技术。1.1语音的采集采样率的大小直接决定语音

3、的清晰度和采集的原始数字数据量的大小。语音的采集和播放的原理一致,前者是进行a/d转换,后者是d/a转换。语音采集的原理是通过在离散的时间间隔采样原始声音并记录每次采样的数字来表示和重建声音波形的技术来实现的。采集的声音数据的格式有很多标准,软件的设计中一般采用波形数据的格式2,wave_format_pcm和wave_format_drm是windows api函数中支持波形数据采样的两种格式。很多程序中采用wave_format_pcm,即pcm(脉冲编码调制)格式,其采样率可以为8khz、11.025khz、22.05khz或441.khz。如果设置单声道,采样率为8khz,每个采样值为

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

5、多媒体应用程序提供了强大的支持,引入了多媒体功能的接口函数库acm3(audio compression manager,音频压缩管理器),它负责管理系统中所有音频编解码器(coder-decoder简称codecs,是实现音频数据编解码的驱动程序),应用程序可以通过acm提供的编程接口调用这些系统中现成的编解码器来实现音频数据的压缩和解压缩,这一类函数和结构的名字一般都以“acm”作为前缀。在delphi6开发音频压缩的程序中,其相应的api声明单元为msasm.pas。语音压缩的程序中,音频压缩管理器控件组包括tacmwavein、tacmdialog、tacmwaveout这三个控件。程

6、序员可在相应的网站(如:windows9x/nt/2000/xp系统自带的音频codecs支持一些音频数据压缩标准,如microsoft ad-pcm、(ima)adpcm、dspgrouptruespeech(tm)等。从压缩率来看,msadpcm和imaadpcm都是4:1,msgsm6.10是2:1,而dspgrouptruespeech(tm)则达到了10:1。从还原后的效果来看,应该msgsm6.10比较好,而且它支持比较高的采样频率,但它的压缩率太小。1.3 语音传输实现本系统采用基于socket的udp协议通信,它作为一个无连接的协议,只是简单地将数据放在端口中,不在发送和接受方

7、之间建立一个连接。这种数据传输方式的安全性较差些,但程序运行过程的鲁棒性要强许多。这里使用delphi6的nmudp控件来传输音频数据,发送报文的任务由sendbuffer方法或者sendstream完成,它负责完成由tacmwavein控件获取的并经控件转换的压缩音频数据的发送。而在它接受到一个报文时,将触发datareceived事件,在此事件函数中,调用readbuffer或者readstream来读取报文的数据,并将这些数据经解压后由tacmwaveout控件加以播放。tacmwavein控件的ondata事件,是当数据满了就会发生这个事件。在这个事件里调用nmudp控件的sendst

8、ream方法把数据发送出去。nmudp控件datareceived事件,是当数据到达时就会发生。在这个事件里调用tacmwaveout.play(buf,size)播放语音流。2 程序设计实现基于以上方法,笔者成功地开发了语音聊天测试软件。该软件平台为;硬件平台为含全双工声卡、麦克风和音响的多媒体pc;开发工具为delphi6。下面介绍具体的开发过程:新建一个工程,对于tacmwavein、tacmdialog、tacmwaveout这三个控件,单击“componet”“install component.”分别选择相应的下载的pas控件文件“ok”;安装上这三个控件。在窗体(如图1)上添加相

9、应控件,注意上述的三个控件在milos面板上。图1 语音聊天测试软件界面uses winsock;/addprocedure tform1.acmwavein1data(data: pointer; size: integer);/接受麦克风语音var pchdata:pchar; mystream:tmemorystream;begin pchdata:=pchar(data); if pchdata1= then exit; mystream:=tmemorystream.create; try mystream.write(pchdata,size); nmudp1.sendstream

10、(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); s

11、etlength(recdata,numberbytes); mystream.read(recdata1,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. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论