TD-LTE调度台中AMR语音实时传输的C++软件实现(专利).doc 立即下载
2024-11-30
约2千字
约2页
0
87KB
举报 版权申诉
预览加载中,请您耐心等待几秒...

TD-LTE调度台中AMR语音实时传输的C++软件实现(专利).doc

TD-LTE调度台中AMR语音实时传输的C++软件实现(专利).doc

预览

在线预览结束,喜欢就下载吧,查找使用更方便

10 金币

下载文档

如果您无法下载资料,请参考说明:

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数据块不补充语音数据。当通话结束后,录音线程会获取通话结束状态字的状态,判断为结束通话状态后执行文件保存的相关代码,最终生成多次录音片段的拼
查看更多
单篇购买
VIP会员(1亿+VIP文档免费下)

扫码即表示接受《下载须知》

TD-LTE调度台中AMR语音实时传输的C++软件实现(专利)

文档大小:87KB

限时特价:扫码查看

• 请登录后再进行扫码购买
• 使用微信/支付宝扫码注册及付费下载,详阅 用户协议 隐私政策
• 如已在其他页面进行付款,请刷新当前页面重试
• 付费购买成功后,此文档可永久免费下载
全场最划算
12个月
199.0
¥360.0
限时特惠
3个月
69.9
¥90.0
新人专享
1个月
19.9
¥30.0
24个月
398.0
¥720.0
6个月会员
139.9
¥180.0

6亿VIP文档任选,共次下载特权。

已优惠

微信/支付宝扫码完成支付,可开具发票

VIP尽享专属权益

VIP文档免费下载

赠送VIP文档免费下载次数

阅读免打扰

去除文档详情页间广告

专属身份标识

尊贵的VIP专属身份标识

高级客服

一对一高级客服服务

多端互通

电脑端/手机端权益通用