如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
一种数字集群系统调度台单呼选择性录音方法 这种选择性录音方法可以完成任意时刻开始录音、任意时刻停止录音功能,并可根据实际需要可重复多次,最终保存的录音文件是通过过程中调度台多次录音片段的拼接。 该选择性录音方法的实现是在AMR实时语音传输程序的基础上实现。 图1TD-LTE集群调度台上语音实时传输系统的软件总体架构 TD-LTE集群调度台DC(DispatchConsole)上语音实时传输系统的C++软件实现主要包括总体架构方案的设计、语音采集和播放模块的实现、语音编解码的实现、网络通信模块的设计以及多线程和缓冲队列的设计等。 采用C++面向对象设计思想,整体架构如图1。系统按功能主要分为7大模块:语音采集、语音播放、编码与封包、解码与拆包、套接口发送、套接口接收、录音处理。 语音采集模块从声卡采集数据并转换为PCM编码数据包送入缓冲队列1;编码与封包模块从队列2中取出数据包,采用自适应多速率(AMR)语音编码压缩标准对语音进行压缩,并且封装RTP头与DTP头形成完整的语音包送入缓冲队列2;套接口发送模块从队列2中取出语音包采用UDPSocket的方式发送至网络,从而实现语音发送的完整过程。 套接口接收模块采用UDPSocket的方式从网络中接收到语音包并将语音包送入缓冲队列3;解码与拆包模块从队列3中取出语音包,进行RTP与DTP拆包并AMR语音解码得到PCM语音数据,然后将语音包送入缓冲队列4;语音播放模块从队列4中取出PCM语音包,将PCM数据送至声卡完成语音播放。 AMR语音实时传输程序最终封装成生成DLL动态链接库,为上层Delphi界面程序提供API函数接口。 该选择性录音方法在以上实时语音传输程序的基础上实现,包括以下几个部分: 1.在原来的语音采集线程中添加发送语音保存缓冲区,用于保存要求录制的实时发送语音;在原来的语音播放线程中添加接收语音保存缓冲区,用于保存要求录制的实时接收语音; 2.新开启录音线程RecordThread完成收发两路语音数据的混音合成以及文件拼接功能,通话结束后保存wav格式音频文件; 3.最后通过设置API函数OpenRecord()与CloseRecord()为上层Delphi界面程序提供开始录音与停止录音功能应用接口。 具体实现方法如下: 开始录音与停止录音API函数会改变录音状态字RecordStatus,TRUE表示用户发出开始录音请求,FALSE表示用户发出停止录音请求。 在语音采集与语音播放两个线程中判断RecordStatus的状态,如果是停止录音状态,则不做任何处理。一旦判断是录音状态,就会保存发送和接收的PCM语音数据,然后采用事件(Event)的方式实现语音采集、语音播放与录音线程的多线程同步,从而通知录音线程进行后续的收发两路语音数据混音合成、文件拼接工作。实现细节为:语音采集线程会把发送的每一帧PCM编码语音都放入缓冲区pPCMSendBuffer,当语音数据帧每次积累满10kb大小时触发事件EventPCMS;播放线程会把接收的每一帧PCM编码语音都放入缓冲区pPCMReceiveBuffer,当语音数据帧每次积累满10kb大小时触发事件EventPCMR;录音线程会采用WaitForMultiObject()机制等待收发两路语音的事件EventPCMS与EventPCMR,收到两事件触发信号之后,录音线程才继续进行后续的收发两路语音数据的混音合成、文件拼接工作。 RecordThread录音线程按照Wav音频文件的标准定义来写录音文件,Wav音频文件标准定义按照文件中的出现位置包括:RIFFWAVEChunk,FormatChunk,FactChunk(可选),DataChunk(数据块)四部分。录音线程首先写好前三部分的wav文件头,接下来写数据块。首先判断录音状态字RecordStatus,一旦为录音状态,就采用while循环的方式,阻塞的WaitForMultiObject()机制不断等待收发两路语音数据,当收和发的两事件成功触发,就采用溢出后取极值的混音算法将pPCMSendBuffer与pPCMReceiveBuffer两路语音合成,合成后清空收发语音缓冲区,最后将合成后的语音数据补充到上次录音保存的wav音频文件数据块尾,并更新Wav文件中的数据大小字段;当录音状态为停止状态时,Wav文件的数据块段尾不补充数据。 这样,Delphi界面用户可以任意时刻发出开始录音请求、任意时刻发出停止录音请求,并重复多次开启与关闭录音请求。开始录音请求时录音线程将语音混音合成后写入wav文件数据块尾,停止录音请求时wav数据块不补充语音数据。当通话结束后,录音线程会获取通话结束状态字的状态,判断为结束通话状态后执行文件保存的相关代码,最终生成多次录音片段的拼
my****25
实名认证
内容提供者
最近下载