蔡立晶,李文勇
(1.黑龙江八一农垦大学,黑龙江 大庆 163319;2.大庆油田有限责任公司第一采油厂,黑龙江 大庆 163162)
语音通信软件是一款利用便捷的网络资源进行语音通信交流软件,是将讲话人的语音转换成数字信号在因特网上进行传输的即时通信软件。IP 语音通信软件是以TCP/IP 协议进行传输的,基于经典的C/S 构架,在Windows 平台下利用Microsoft Visual C++开发环境下的网络编程。这种语音通信是一种利用网络资源进行语音通信的新型方式,语音通信使用点对点的联结进行语音通信。软件使用Windows-Socket 技术进行设计,根据相关编码对语音进行采集、抽样后编码成数字信号,利用网络为载体进行数字信号的传输。软件的基本架构为连接控制模块、语音采集模块、语音传输模块、语音播放模块。主要的关键技术有编码技术、服务质量(QOS)保证技术以及网络传输技术等。此软件主要是TCP 或UDP 作为其传输协议,这样易于实现和调试,更重要的是灵活性和扩展性好。
系统模块主要由界面设计、语音通信、数据传输、语音压缩、控制设置组成。不同的模块各自担当自己的责任,各模块之间还相互结合,最终实现语音通话过程。运用的主要技术知识有TCP/IP 协议(主要运用三次握手和四次释放)、UDP 协议(高效率、低可靠性)、Windows-Socket 网络接口编程以及语音压缩技术。
(1)界面设计模块:是整个界面中按键的大小设置、按键的排布、画布的大小设置、以及一些背景颜色的安排等。
(2)数据传输模块:是报文之间的交互、报文之间的解析过程的设计。这次语音通信软件主要采用的协议是TCP/IP 和UDP。使用TCP/IP 建立连接后,通过UDP 报文来通信。
(3)语音设计模块:是利用Windows-Socket 网络编程接口来实现模拟信号转换成数字信号的设计。
(4)语音压缩模块:是运用主流技术ACM 压缩,压缩音频数据使得数据最小占用内存,得以快速传递和转换,实现高效率、低内存等效果。
(5)按键控制模块:设计的产品或多或少都有一些需要用户自己选择的功能,而按键就是用户选择功能最直观的反应。每个按键都有自己所对应的功能,需要用编程来实现,而后利用按键来调用这个函数功能。
通信软件,根据选择完善的设备,适合的操作系统以及稳定的运行性能,这样能节约资源和缩短时间。硬件环境:微软操作系统 PC 机;1G 以上内存;2.0GHz CPU 频率以上;具备声卡和麦克。软件环境:安装VC++6.0。
主要实现局域网内2 个点对点用户互相传递语音信息的功能。输入IP 地址点击确认发起通话,实现端对端通信。对方可以拒绝通话或接受对方的通话请求。按退出键可以断开连接,结束语音通话。简单的系统流程图如图1 所示。
图1 系统流程图
这里主要的协议采用了TCP/IP 协议、UDP 协议,TCP/IP 协议是面向连接、带心跳监测机制的协议,UDP协议是面向无连接低可靠、高传输的协议。Window-Socket 是微软和其他公司一起创建的用于网络接口的编程语言,并详细介绍了其中的流程。
信息产业的高速发展,IP 语音技术带给人们全新的信息化,集合语音、视频、数据传输为一体的主流通信技术成为主要实现局域网内端对端用户之间的信息交互过程,不同模块负责不同的功能,最后不同模块相互连接,实现语音通信。软件的总体过程包含语音采集,ACM 的压缩,网络的传输,语音的解压,语音的播放。语音通信的结构图如图2 所示。
图2 语音通信结构图
该软件的功能是语音传输,主要过程是语音采集,ACM 压缩,网络传输,语音解压,语音播放。通过话筒将语音转化成数字信号,然后进行压缩,压缩完放回内存中,通过网络这个媒介传输给对方,对方接到后再利用CPU 进行解压,将数字信号转换成模拟信号,放入内存后,利用音响等设备进行回放。
语音连接指的是客户端向服务器发出一个语音连接请求,服务器做出合理的回应,服务器做出的方式有无响应,接受通话,拒绝通话,退出语音通话。
(1)IP 地址输入设计
该功能主要用于填写目的主机的IP 地址,实现访问对象。当启动软件时,本地IP 地址可以自动获取并显示在软件界面上。IP 地址主要采用IPV4 例如:192.168.1.1。
(2)连接按键设计
本地IP 自动获取,当将对方的IP 地址填入相应的IP 地址栏里,只需要点击连接按键,就可以向目的主机发起TCP 连接请求。当没有填写目的主机的IP 地址时,点击连接按钮,本地IP 地址会以广播的形式显示在软件界面上,提示要输入对方的IP 地址。
(3)接受通话按键设计
建立起TCP 连接要执行一个合理的操作,而接受通话按键点击后,就可以实现与对方通话。前提是系统都有声卡和麦克而且必须是完好的、可用的。
(4)拒绝通话按键设计
软件也要考虑实用性方面的问题。如果对方现在很忙或者有急事,不能强制要求对方来接受语音通信,这个时候对方就可以点击拒绝通话来解除语音通话的发起,同时也能回复给发送端信息,现在无法接受通话,避免发起端等待。
(5)退出按键设计
一个比较完善的软件需要具备退出功能,当不想使用此软件时,点击退出按键关闭程序。
语音采集技术是将各种应用系统所需的各种语音信号进行直接采集、处理存放在EPROM 芯片中,当系统运行的时候,便可以根据需要,随时用于识别和组合。主要有 lpData、dwBufferLength、dwBytesRecorded 等成员,其中lpData 是最重要的组成也是最经常用到的。
(1)录音设计
WaveInAddBuffeer 函数是将三块内存添加到录音设备上,当数据占满三块内存时发送数据已满的信息,WaveInAddBuffeer 又重新将缓冲区添加上来,这样三块内存就能达到循环使用,而可以做到循环录音这个效果。录音的质量与环境、设备等因素有关,主要是体现在内存和麦克音量大小,内存越大,音量越大,录音的质量也就越好,所以一般把音量调到最大后开始录音。
(2)回放设计
回放时将音频设备打开并调节合适,使用Wave-OutAddBuffee 函数将数据放入缓存区,达到播放的效果。
数字信号具有储存空间小,传输比特率低,节约带宽等特点,而语音编码就是对模拟的语音信号进行编码,将模拟信号转化成数字信号,从而降低传输码率并进行数字传输,数字化之后的语音信号需要语音压缩编码。语音编码的基本方法可分为波形编码、参量编码和混合编码。波形编码是对语音时域或频域波形进行编码,方法简单,失真最小,但编码码率较高,压缩比不大。参数编码的基础是利用人类语音的生成模型,大大降低了系统的码率,缺点在于音质较差,复杂度高。混合编码是波形编码和参数编码的结合,吸收了波形编码和参数编码的优点,在较低的比特率上取得较高的语音质量,是最常用和最推崇的技术。
压缩编码技术有很多,此次软件开发主要应用到ACM 音频压缩接口的编程方法,使用的编程工具为Microsoft Visual C++。应用程序可以通过ACM 提供的编程接口调用这些系统中现成的编解码器来实现音频的压缩和解压缩。
(1)ACM 压缩原理
压缩音频数据主要原理是降低存储某一声音序列所需的数据量。少的数据量所占有的空间少,能够以更快的速度通过MODEM 在网络上传递。如果数据以Windows系统所支持的某种通用格式压缩的话,就可不经手工解压缩而直接播放,系统将使用自己的CODECs 解压缩数据并播放。CODEC 支持从源音频格式到目标格式的转换,转换时要采取两步转换法,即先将源格式转换成一种中间格式,再将中间格式转换成目标格式。
(2)ACM 程序设计
ACM 的API 函数定义在头文件msacm.h 中,除了在工程中加入对此头文件的引用之外,对ACM 编程还必须包含头文件mmsystem.h 和mmreg.h,这两个头文件定义了多媒体编程中最基本的常量和数据结构。
压缩和解压缩一样,都是将音频信号从一种音频格式转换成另一种格式。计算压缩后音频数据大小,并以此适当增加输出缓冲区的大小。音频数据真正的压缩过程是由函数acmStreamConvert()完成的,在调用函数acm-StreamConvert()时可以指定回调函数,以便在转换过程中显示进度信息等。
语音在进行压缩编码后不一定完全传输,有可能数据源超过内存容量,这时需要等待音频再生模块之后释放内存,保存和再传输。
语音通信软件,需要2 台PC 机处于同一个局域网并且能够通信,也可以使用交叉线使2 台PC 直连,另外需要麦克和外置音频。
测试内容分为几个步骤:(1)自动获取IP 地址,当运行此软件时系统自动获取到本机的IP 地址。(2)连接功能模块,当填入目的主机IP 地址,点击连接按钮时,本地IP 地址会变成目的IP 地址。如果成功连接,连接按钮、通话按钮会成灰色,只有退出键成正常的黑色。(3)通话功能,当目的主机收到通话请求时,点击通话按键便可正常通话。(4)拒绝功能,当目的主机收到通话请求可以执行断开操作。(5)退出功能,当不想进行通话时可以点击退出,退出软件。
语音通信软件主要利用WinSocket 技术进行设计,根据相关编码对语音进行采集、抽样、编码成数字信号,能够对生成的数字信号进行网络传输。以TCP/IP 协议进行传输,基于经典的C/S 构架,在Windows 平台下利用Microsoft Visual C++开发环境下的网络编程。系统性能要求具有较高实时性和稳定性,得到了实现。软件能够进行语音回放、压缩,建立起语音通话功能。开发出来的软件能够在Windows 平台下不同主机进行语言通信,并且通信的延迟能限制在一定范围内。
软件经过测试,画面干净、明了,功能达到了预期所要的结果,语音通信连接的发起迅速,稳定。软件语音通话质量有待提高,通话过程中会夹杂些杂音,说话时的声音并没有想象中的清晰,而且在不稳定的网络环境下可能会导致语音通话断线。其次是缺少一些辅助功能的实现,可以向着视频语音开发。增加一些音量调节按钮,录音、拍照、通讯录等功能。