logo资料库

利用ADPCM进行网络环境下实时多点语音通信.pdf

第1页 / 共4页
第2页 / 共4页
第3页 / 共4页
第4页 / 共4页
资料共4页,全文预览结束
利用 !"#$% 进行网络环境下实时多点语音通信 李文华 许 刚 ’华北电力大学信息工程系!北京 >"!!"&$ 摘 要 目前网络语音通信应用逐步增多!但效果还不甚理想" 该文阐述了应用音频处理 *+( 函数&*,+-. 编码调制技 术和 G,+ 协议进行网络环境下实时多点语音通信的方法 !并给出其实现过程 " 实现机制为发送端利用低层音频服务的 回调机制对音频数据块进行动态循环处理 !防止了由于系统在写满语音输入缓冲区后 !新&旧 缓 冲 区 交 换 时 有 一 定 的 间 隙而产生的输入数据泄漏" 在传输之前采用 *,+-. 编码!有效地利用了现有带宽!传输后经缓冲解码再进行播放!尽可 能 地 恢 复 原 始 语 音 信 号 " 由 于 采 用 *,+-. 编 解 码 技 术 !实 现 了 在 各 种 网 络 环 境 下 进 行 实 时 多 点 语 音 通 信 !效 果 较 为 理 想" 关键词 *,+-. 编码 语音通信 G,+ 传输 文章编号 >""!JE%%>J’!""#$%&J">!KJ"# 文献标识码 * 中图分类号 H+%L% &’()*+,-’ %.)+,*/0,1+ 2/’’34 $0--.1,3(+,01 56,17 !"#8% ,1 80-/.+’9 :’+;09< =, >’14.( ?. @(17 ’,51072M582 <6 (86<7M023<8 N8O3855738O!)<72P -P380 N95Q273Q +"!!"&$ AB6+9(3+( *2 175;582!2P5 01193Q023<8; <6 2P5 ;155QP Q?! 利 用 ’()@A-B! 进行网络环境下实时多点语音通信=!C% 发送端采用 *,+-. 编码技术!压缩数据流到原来的 > D E!极 大 地 利 于 网 络 传输" 根据网络状况开设三个以上的缓冲区!利用低层音频服 务的回调机制对音频数据块进行动态循环处理 !防止了由于系 统 在 写 满 语 音 输 入 缓 冲 区 后 !新 &旧 缓 冲 区 交 换 时 有 一 定 的 间 隙而产生的输入数据泄漏" 接收端相应地改变了接到音频数据 经缓冲后马上调用 F045A:2’7325 函数将数据传递给 输 出 设 备 的传统模式=%C!而是采用数据缓冲后解码机制!即接到两个缓冲 区的数据后将这两个缓冲区的音频数 据 进 行 *,+-. 解 码 !再 传递给输出设备!以后每接到一个缓冲区的数据后马上将该音 频数据进行解码再传递给输出设备" 由于输出设备在接收音频 数据后并不是缓冲后立即播放 !而是把数据进行解码 !因此 !如 果数据缓冲区的大小设置得比较合理!在网络正常的情况下输 出数据缓冲队列上会一直有音频数据在等待解码播放 !这样就 避免了在传统方式下!由于网络延时接收端等待音频数据而产 生 的 话 音 停 顿 ! 加 大 了 传 输 的 数 据 量 " 在 传 输 方 式 上 采 用 了 G,+ 协 议 =#C!在 网 络 条 件 较 好 的 情 况 下 !比 H-+ 协 议 =%!IC更 适 合 传输语音信号" 该文最后给出了缓冲区块数&缓冲区路数&同时 连 接 路 数 &语 音 效 果 和 连 接 类 型 的 比 较 实 验 数 据 !并 对 此 进 行 了详细的分析说明!结果表明!采用该文给出的原理机制!进行 网络环境下实时多点语音通信有明显改善" > ’(),A’@!""" 环境下的音频处理机制和过程 该文介绍的 ’(),A’@!""" 环境下的语音通信!需要经历 作者简介(李文华’>LKIJ$!男!硕士!研究方向为语音信号处理与分析% 许刚!副教授% 计算机工程与应用 !""#$%& !"#
采集 !编 码 !传 输 !解 码 和 播 放 五 个 阶 段 "这 五 个 阶 段 在 实 时 语 音通信中每一阶段都是十分重要的# ’$’ ()*+,-. /01 音频服务简介 为 了 满 足 不 同 应 用 的 需 求 "()*+,-. /01 $ /234)56+)7 06863,96: 1)4%;&<设 计 了 高 层 &低 层 两 种 不 同 层 次 的 音 频 服 务 # 一般来说" 高层音频服务能够满足大部分的多媒体应用需求 " 它提供与设备无关的应用程序接口 "包 括 媒 体 控 制 接 口 $/=>% 函数和高层波形音频函数"通过存取特定格式的媒体文件来对 音频数据进行操作# 但是这种基于文件格式的控制不适合对音 频数据进行动态实时处理# 而低层音频服务"直接控制与设备 驱动程序打交道的音频数据"它提供了对音频驱动程序的直接 操 作 和 对 音 频 数 据 的 逐 位 的 精 确 控 制 " 是 所 有 音 频 处 理 的 基 础 "包 括 低 层 波 形 音 频 &/>0> 和 辅 助 音 频 函 数 "它 为 多 媒 体 计 算机音频硬件提供了与设备无关的低级接口" 具有灵活性高 & 实时性强的特点# 要想实现对声音的实时处理"就必须摆脱文 件格式的控制"直接对音频数据进行操作"因此"通过低层音频 服务来实现网络通讯比较符合实际需要# ’$! 低层音频采集的过程 首先介绍一下 ()*+,-. 低层波形音频数据块结构 (?@AB 内存( $&%初 始 化 音 频 数 据 块 结 构 各 成 员 变 量 "主 要 是 将 每 个 缓 冲区指针赋给对应数据块结构中的缓冲区指针变量 390747(调 用 -786>*I:697:6C67+6: $%-786>*?++N2OO6: $% 将 音 频 数 据 块 赋 给输入设备驱动程序( $_%调用 -786>*J47:4$%函数开始录音# 录 音 开 始 后 "每 当 有 缓 冲 区 填 满 采 样 数 据 后 "就 发 消 息 给 回调对象"由相应的窗口过程或回调函数对数据块中的采样数 据进行处理"到 ?0I=/ 编码阶段# ’$% ?0I=/ 编码 ?0I=/ 是利用样本与样本之间的高度相关性和量化阶自 适应来压缩数据的一种波形编码技术;’"_<"==>KK 为此制定了 X$ _!& 推荐标准"使用该标准的编码器的数据率可降低到 ’&‘a L .# X$_!& ?0I=/ 标 准 是 一 个 代 码 转 换 系 统 " 它 使 用 ?0I=/ 转 换 技 术 " 实 现 ’!Y‘a L . ? 律 或 ! 律 I=/ 速 率 和 ’&‘a L . 速 率 之 间 的 相 互 转 换 # X$_!& ?0I=/ 的 简 化 框 图 如 图 ’ 和 图 ! 所 示 # C0D"其声明如下’ 4E96 .4:2F4G HIJKD 390747( L 0(MD0 +-N2OO6:H6*P4Q( L 0(MD0 +-NE46D6F,:+6+( L L 指向锁定的数据缓冲区的指针 L 数据缓冲区的大小 L 录音时指明缓冲区中的数据量 0(MD0 +-R.6:( L 0(MD0 +-S37P( L 0(MD0 +-H,,9.( L L 用户数据 L 提供缓冲区信息的标志 L 循环播放的次数 .4:2F4 -786Q+:T47P!39U6V4( L 0(MD0 :6.6:86+( L L 保留 L 保留 W (?@AC0D( 声音的采集和播放都是在操作这个音频数据块结构 "实际 上主要用到的就是第一个成员变量 390747"所以只要在分配缓 冲区的同时相应分配 (?@AC0D 数据块结构 " 然后将缓冲区 的指针赋给对应的数据块结构的成员变量 390747"这样当一个 缓 冲 区 填 满 后 "也 就 是 一 个 音 频 数 据 块 填 满 了 "通 过 消 息 机 制 就可以在消息函数中进行处理"处理完后又可通过消息函数把 缓冲区再送给音频设备输入驱动程序" 继续进行采集并处理 " 当 你 一 次 性 分 配 多 个 缓 冲 区 和 数 据 块 结 构 并 赋 给 音 频 设 备 输 入 驱 动 程 序 后 "至 于 把 哪 个 缓 冲 区 填 满 "然 后 再 把 哪 个 空 缓 冲 区赋 给 设 备 输 入 驱 动 程 序 "不 需 人 为 干 预 "完 全 由 ()*+,-. 控 制 "这 就 是 一 种 用 动 态 循 环 缓 冲 区 实 现 话 音 的 实 时 采 集 &编 码 的简单而巧妙的办法# 实现步骤’ $’%用 -786>*X64U25068. $% 查 看 当 前 系 统 波 形 音 频 输 入 设备"用 -786M24X64U25068.$%查看当前系统波形 音 频 输 出 设 备( $!%按 Y"""CZ"’&N)4"单 声 道 的 格 式 设 置 (?@ASMD/?B KA[ 结构的成员变量( $%%用 -786>*M96*$%和 -786M24M96*$%分 别 调 用 (?@AT SMD/?KT\RAD] 参 数 查 看 波 形 输 入 设 备 是 否 支 持 所 设 定 的 格式( $#% 再 次 用 -786>*M96* $% 和 -786M24M96* $% 分 别 调 用 =?HHN?=1T(>U0M( 参数打开波形输入设备( $^%分 别 给 音 频 数 据 块 和 音 频 数 据 缓 冲 区 分 配 &锁 定 全 局 !"# !""#$%& 计算机工程与应用 图 ’ ?0I=/ 编码器 在 图 ’ 编 码 器 中 "? 律 或 ! 律 I=/ 输 入 信 号 转 换 成 均 匀 的 I=/# 差 分 信 号 等 于 均 匀 的 I=/ 输 入 信 号 与 预 测 信 号 之 差# )自适应量化器*用 ! 位二进制数表示差分信号 "但只用其 中的 ’^ 个数$即 ’^ 个量级%来表示差分信号"这是为防止出现 全)"*信号+ )逆自适应量化器*从这 ! 位相同的代码中产生量 化 差 分 信 号 + 预 测 信 号 和 这 个 量 化 差 分 信 号 相 加 产 生 重 构 信 号+ )自适应预测器*根据重构信号和量化差分信号产生输入信 号的预测信号 "这样就构成了一个负反馈回路+ 图 ! ?0I=/ 解码器 X$_!& ?0I=/ 编码器的输入信号是 I=/ 代码"采 样 率 是 Y‘CZ"每 个 代 码 用 ’& 位 表 示 "因 此 它 的 数 据 率 为 ’!Y‘a L .+其 输出代码是)自适应量化器*的输出"该输出是用 ! 位表示的差 分 信 号 "它 的 采 样 率 仍 然 是 Y‘CZ"它 的 数 据 率 为 ’&‘a L ."这 样 就获得了 Yb’ 的数据压缩+ 在图 ! 所示的译码器中 "译 码 器 的 部分结构与编码器负反馈回路部分相同+ 此外"还包含有均匀 I=/ 到 ? 律 或 ! 律 I=/ 的 转 换 部 分 " 以 及 同 步 编 码 调 整 $.E*FQ:,*,2. F,+)*P 7+c2.456*4%部分+ 设置同步$串行%编码调 整的目的是为防止在同步串行编码期间出现的累积信号失真 + 在编码器中"差分信号的计算是’ !$"%#$%$"%&$’$"% $’%
! ! ! ! 式 !’"中 !"!#"是输入的均匀 ()* 信号#!$!#"是 预 测 信 号 $ 量 化 器 是 一 个 # 级 非 均 匀 自 适 应 量 化 器 #在 量 化 前 #%!#"转 化 成以 ! 为底的对数表示#并且用自适应定标因子 &!#"度量$ 量 化器输出的幅度值’(!#"’由表 ’ 给出$ 表 ’ 量化器输入输出特性 归一化量化器输入范围 4(!#"4 归一化量化器输出 YWV!4%)!#"’-&!#" T!$"##]‘" !,‘#,!$"#" YWV!4%)!#"’-&!#" ’ " !$-6 "$a’ 量 化 后 差 分 信 号 %)!#"由 逆 量 化 器 计 算 #根 据 自 适 应 定 标 因 子 &!#"度 量 #从 表 ’ 中 得 到 输 出 #再 从 对 数 域 转 换 到 原 域 $ 量化器定标因子有 ! 种模式适应#快速方式产生的差分信号波 动大#慢速方式产生的差分信号波动小$ 适应速度由这两种方 式的因子共同控制$ 自适应预测器的主要功能是从量化后差分 信号 %)!#"计 算 预 测 信 号 !$!#"$ 预 测 器 采 用 两 种 结 构 #一 个 & 级的模拟零点部分和一个 ! 级的模拟极点部分$ 这种结构可以 适应广泛的输入信号$ 预测信号计算% ! 过程#由于篇幅有限这里就不多介绍了$ 由于网络传输过程中 的延时和延时长短的不确定性#若接收端采用接到音频数据即 马上进行 <=()* 解码的机制 #在解码完一 个 缓 冲 区 的 数 据 与 接到下一缓冲区的数据之间将有时间间隙#从而产生明显的话 音停顿#而人耳对这样的停顿是最为敏感的$ 因此#该文在第一 次接收到一个缓冲区的音频数据后并不马上进行解码 #而是在 接 到 两 个 缓 冲 区 的 数 据 后 将 这 两 个 缓 冲 区 的 音 频 数 据 同 时 解 码#以后每接到一个缓冲区的数据后马上将该数据解码$ 这样# 由于输出设备在接收音频数据后并不是立即解码播放 #而只是 把 数 据 加 载 在 输 出 数 据 缓 冲 队 列 上 #因 此 #如 果 数 据 缓 冲 区 的 大小设置得比较合理#在网络正常的情况下输出数据缓冲队列 上会一直有音频数据在等待解码播放#上述的话音停顿则会得 到明显改善$ 解码的数据传给下一个阶段$ ’$6 接收端的播放过程 经解码后获取进行播放的波形音频格式信息 #接下来进行 语音的播放#过程和语音采集相似$ 主要是% !’"通 过 调 用 >?@ABCDEADFCG=A@;!"(>?@ABCDBHAI!"函 数 !$!#"* !,+ !#-’"!. !#-+"/!$0 !#" + * ’ 其中% & !$0 !#"* !1+ !#-’"%)!#-+" + * ’ !!" 打开波形输出设备$ !!"调 用 >?@ABCD(JAH?JAKA?LAJ!"函 数 传 递 音 频 数 据 块 的 方法#请求设备驱动程序完成相应准备工作$ !%"调用 >?@ABCDMJNDA 函数将数据传递给输出设备$ %)*%!#"/$!#" 重建信号定义% !.!#-+"*!$!#-+"/%)!#-+" 预测系数用一个简单的渐进算法% 对于 ! 级预测器% ,’+!’,!,-",’!#-’"/!%&!,-"!23.4!#"/!23.4!#-’"0 ,!+!’,!,1",!!#-’"/!,12!23.4!#"0!23.4!#-!"0, !%" 5.,’!#,’"0!23.4!#"0!23.4!#-’"03 !#" 其中% 4!#"*%)!#"/!$0 !#" 5!,’"+ #,’ # ,’ 4,’ 4"! ,’ !!23!,’ " 4,’ 45! 对于 & 级预测器% 1+!#"*!’,!,-"1+!#-’"/!,1!23.%)!#"0!23.%)!#-+"0 ++’#!#’#& 初始值设置为% %!""+!6!""+!7!""+" %)!#" ,’#,! #8" 表示渐进系数 !6" 表示移动平均系数 1+ %!#" 表示差分信号 %)!#" 表示量化后差分信号 $!#" 表示量化误差 -7’&89 : ; 的 录 音 信 号 作 为 输 入 信 号 经 <=()* 编 码 转 为 ’&89 : ; 的信号后发送到 传 输 端 口 #然 后 #对 该 数 据 块 进 行 必 要 的准备后重新发送给输入设备# 以准备接受后续的采样数据 $ 这 样 #音 频 数 据 块 在 消 息 的 控 制 下 被 循 环 使 用 #使 得 实 时 处 理 过程可以持续下去$ ’$# 接收端 <=()* 解码 <=()* 解码器的工作原理和编码器类似 # 就是编码的逆 ! 多点双向网络通信机制 !$’ 网络通信机制 目前网络通信有很多不同方式#通常应用较多的主要包括 调 制 解 调 器 拨 号 上 网 (
缓冲区又可参加调度! 减少了等待数据时间和缓冲区的数目 " 由于播放器的缓冲区也可实现缓存!因此不必再将数据进行缓 存!接收方收到数据后将数据直接送到解码器解码 " 但在解码 器中如果数据不够解码显示!则需等待数据的到来" 通过该方 法从而实现了实时语音数据的传输并播放" 与其它网络程序相 比!其初始化稍有不同" 初始化得到一个 ’()*+, 套接字需进行 如下设置# -’()*./’0’()*+,$ 0123456! 7 7 地址家族 ’89:2;<=0>! 7 7 套接字的类型 "! 7 7 协议类型 $?@/’0@=86898?2 3418%4A??! 7 7 协议内容 "! 7 7 保留 /’021?0<2>A?63@8346292?501B/’021?0<2>A?63@83462 ;2?501%& 7 7 数据报标志 然 后 !通 过 ’+,C()*(D, 函 数 设 置 套 接 字 的 属 性 !如 允 许 地 址重用’缓冲区是接收还是发送等( 通过 /’03(),E 函数设置套 接字生存时间!调用 FGHI 对套接字进行绑定) 注意在初始化时 目的地址一定是上面所提到的多播地址" 但在接收方还需调用 /’0J(GH?+KL 来加入多播组!其设置如下# -4+MC()*./’0J(GH?+KL *-C()*! 7 7 ’()*+, 套 接 字 必 须 为 多 播 标 志 进行创建否则调用失败 *@’89:0;;=%IC,;+C,0IIN! 7 7 多播地址 7 多播地址长度 4A??! 7 CGO+(L*C,;+C,0IIN%! 7 7 呼叫者数据 7 被叫者数据 7 ’()*+, 套接字的 P(’ 设置 7 ’()*+, 组的 P(’ 4A??! 7 4A??! 7 4A??! 7 7 允许接收和发送 J?2F86Q%& 7 发送方和接收方的多播地址一定要相同!它们才是一个组 的 ) 初 始 化 完 成 后 ! 在 发 送 方 响 应 发 送 的 消 息 中 调 用 /’0’+HI6( 函数!接收方的 接 收 调 用 /’0=+)R1N(S 函 数 ) 接 收 方 的 接 收 可 以 是 阻 塞 和 非 阻 塞 的 ! 笔 者 所 采 用 的 是 阻 塞 方 式!所以在接收数据中设置了等待超时) 为了实现返回!调用函 数# /’0/KG,1(N>TE,GDE+5U+H,C*E! 7 7 指向等待事件的句柄 -5U9H,! 7 7 等待事件的个数 LKEC+! 7 7 等待一个事件的同步 7 等待超时时间 V2H6GS+(T,! 7 表 ! 不同网络下的测试结果 数据缓冲 数据缓冲 同时连 语音效果 网络类型 区块数 区大小*F% 接路数 # # # % % % ! ! ! % % % W&"" W&"" W&"" Y"" Y"" Y"" Y"" Y"" Y"" &"" &"" &"" X X % X X % X X % X X % W""> 局域网 W"> 局域网 可以多点双向正常传输!无顿音! 话音清晰质量好!延时较大 可以多点双向正常传输!无顿音! 话音清晰质量好!延时较大 可以多点双向正常传输!无顿音! 拨号上网 话音清晰质量好!延时较大 可以多点双向正常传输!无顿音! 话音清晰!延时小 可以多点双向正常传输!无顿音! 话音清晰!延时小 可以多点双向正常传输!稍有顿音! 拨号上网 话音清晰!延时小 话音不连续 W""> 局域网 W"> 局域网 话音不连续 话音不连续 W""> 局域网 W"> 局域网 拨号上网 话音连续!音质差!延时最小 话音连续!音质差!延时最小 话音连续!音质差!延时最小 W""> 局域网 W"> 局域网 拨号上网 语音信号只需要 W&* 的带宽!即使用 X&* 的调制解调器上网可 以 正 常 同 时 传 输 % 路 !在 局 域 网 上 路 数 可 以 达 到 更 多 !这 十 分 有利于推广应用" 即使在临界状态下也能很好的传输语音 !这 充分说明了缓冲区的重要性" 在网络阻塞时!网络流量下降到 W"* 左右时短时间内也能正常传输!只要根据自 己 的 网 络 状 况 和资源大小选择好缓冲区大小和块数就能很好地传输语音" 该 程序设计在 U9\\ U&$" /34;8/’!""" 下通过! 其 详 细 源 代 码可以联系笔者" # 结论 该 文 是 多 媒 体 通 信 与 网 络 传 输 项 目 的 重 要 内 容 ! 在 基 于 /34;8/’ !""" 的 系 统 上 采 用 0;@9> 可 以 很 好 地 完 成 网 络 环境下实时多点语音通信" 从上述实验可以看出 !采样频率固 定的情况下!关键是选择好缓冲区大小和块数使语音的传输效 果达到最好" 由于采用 0;@9> 编码!用 X&*[DC 调制解调器传 输效果也较理想!适合广大网络用户使用!应用范围广泛" 另外 还有待改进的地方将有文章另行介绍" *收稿日期#!""# 年 X 月% LKEC+%../’02/03625U5462" 7 接收到的数据放到缓冲区!经解码器解码后播放) 每个点 7 超时 参考文献 上的设置大致相同!实现多点语音通信) % 实验结果和分析 该 实 验 是 在 W""> 局 域 网 +W"> 局 域 网 和 X&:>8;5> 拨 号 上 网 等 多 种 网 络 上 进 行 测 试 ! 基 于 /GHI(MC!""" 环 境 下 完 成的" 五台机器建立连接*五台以上机器连接原理与五台机器 连接相同 %!语音采样用 YZW&*[D 7 C 位单声道方式 !经过反复 试 验得到表 ! 所示实验数据" 从表 ! 数据可以看出!语音传输的质量是由数据缓冲区的 大小决定的!缓冲区越大音质越好!但延时也会增大" 而缓冲区 块数最少要在 % 块以上才能正常工作!网络条件差时可以增加 缓 冲 区 块 数 ! 但 同 时 也 会 消 耗 更 多 的 系 统 内 存 " 由 于 采 用 了 0;@9> 编码!数据流减少到未压缩时的 W 7 Y!每路 YZW&*[ 7 C 的 !"# !""#$%& 计算机工程与应用 W$36A]6 =+)(SS+HIK,G(H < ^!&$#" !%! !!# !KHI W& *[ 7 C 0IKD,GR+ ;GLL+N+H,GKE @TEC+ 9(I+ >(ITEK,G(H *0;@9>%$W__" !$+ 通 科 技 研 究 中 心$网 络 硬 件 及 配 置 标 准 教 程‘>a$人 民 邮 电 出 版 社 ! !""!]"_ %$张 静 !许 刚$基 于 /GHI(MC_Y 环 境 的 多 点 双 向 数 字 语 音 通 信‘Jb$计 算 机工程!!""%&!_*&% #$/ =G)-KNI ’,+R+HC$69@ 7 3@ 3EETC,NK,+I!U(ETS+ W!6-+ @N(,()(EC$W__^ X$;(TVEKC 5 9(S+N$用 69@ 7 3@ 进 行 网 际 互 连 ‘>b$ 电 子 工 业 出 版 社 ! W___]"& &$马华东$多媒体计算机技术原理‘>b$清华大学出版社!W___ ^$李煜晖!朱山风!段上为等译$多媒体数字压缩原理与标准‘>b$电子工 业出版社!!"""]"Y Y$易君$UGCTKE 9\\$456 网络编程‘>b$中国铁道出版社!!""%]"&
分享到:
收藏