一种基于嵌入式Linux的语音聊天客户端及其实现方法

文档序号:7722541阅读:136来源:国知局
专利名称:一种基于嵌入式Linux的语音聊天客户端及其实现方法
技术领域
本发明涉及一种基于嵌入式Li皿x的语音聊天客户端及其实现方法,属于电子信 息技术领域。
背景技术
随着宽带网的普及以及计算机网络技术和电子信息技术的发展,信息家电和智能 仪表等越来越多的嵌入式网络设备接入到Internet中,人们通过嵌入式网络进行交流的 需求也越来越迫切。而语音交流作为一种直观、便捷的交流方式,也越来越受到用户的重 视,其相对于文字聊天更加便捷,相对于视频聊天则更易于实现,即使网络速度受限的情 况,通过相关算法亦能实现流畅的语音交流。 现有嵌入式网络平台一般内存较小,主频较低,加之很多环境下网络带宽受限,采 用传统方法,通过嵌入式网络平台进行语音聊天经常发生语音断断续续的现象,有时会由 于使用嵌入式网络平台进行语音聊天而导致系统崩溃。

发明内容
针对现有技术的缺陷,本发明提供一种基于嵌入式Li皿x的语音聊天客户端及其 实现方法。 —种基于嵌入式Linux的语音聊天客户端,客户端是一个嵌入式系统网络终端, 在嵌入式系统网络终端存储下述软件模块语音采集模块、语音编码模块、语音发送模块、 语音接收模块、语音解码模块和语音播放模块,实现客户端同时发送接收语音的功能。所述 的嵌入式系统网络终端的核心是ARM9系列处理芯片S3C2440, S3C2440与被控制的音频处 理芯片UDA1341连接。 —种基于嵌入式Li皿x的语音聊天客户端的实现方法,实现方法如下 1)核心处理芯片S3C2440和音频处理芯片UDA1341初始化,设定嵌入式系统网络
终端的工作模式; 2)采集语音数据; 3)对采集的语音数据进行语音编码,在语音编码模块上建立1024个帧的缓冲区, 将采集的原始语音数据转换为MP3格式; 4)通过语音发送模块发送语音数据到互联网;通过帧缓冲的方式均衡语音编码 模块的编码速度的浮动; 5)语音接收模块通过帧缓冲、自适应调速和逆序丢帧检测的方式接收语音数据;
6)对接收的语音数据进行语音解码,在语音解码模块上建立1024个帧的缓冲区, 将接收的MP3格式语音数据转换为原始语音数据;
7)播放语音数据。 所述的一种基于嵌入式Li皿x的语音聊天客户端的实现方法,其特征在于,步骤 4)所述的帧缓冲的方式为
(1)设置语音编码缓冲区的大小为1024个数据帧; (2)语音采集模块开始采集语音数据帧; (3)语音数据帧按照帧顺序存入到语音编码缓冲区中; (4)检测是否为开机第一次运行,如果不是则语音发送模块直接发送语音数据 帧; (5)如果是开机第一次运行,则检测编码缓冲区帧数是否达到512 ; (6)如果编码缓冲区帧数尚未达到512,则循环执行采集语音并存入语音编码缓
冲区的步骤,直到编码缓冲区的帧数达到512 ; (7)如果编码缓冲区帧数达到512,清除开机标志位,语音发送模块发送语音数据 帧; 步骤5)所述的帧缓冲方式与步骤4)所述的帧缓冲的方式相同。 所述的一种基于嵌入式Li皿x的语音聊天客户端的实现方法,其特征在于,步骤
5)所述的自适应调速的方式是 (1)接收语音数据帧; (2)执行丢帧逆序检测; (3)进行帧解析,并按照帧顺序存入语音接收缓冲区; (4)检测是否为第一次开机运行,如果不是第一次开机运行,则执行步骤(8); (5)如果是第一次开机运行,设置解码缓冲区大小为1024个数据帧; (6)如果语音接收缓冲区中的帧数达到512,则执行步骤(8); (7)如果语音接收缓冲区中的帧数未达到512,则执行步骤(l),直到语音接收缓
冲区中的帧数达到512,执行步骤(8); (8)解码语音数据帧; (9)按照帧顺序存入语音解码缓冲区; (10)检测是否为第一次开机运行,如果不是第一次开机运行,执行步骤(14);
(11)如果是第一次开机运行,检测语音解码缓冲区中的帧数是否达到512 ;
(12)如果语音解码缓冲区中的帧数达到512,清除开机标志,执行步骤(14);
(13)如果语音解码缓冲区中的帧数未达到512,则执行步骤(8),直到语音解码缓 冲区中的帧数达到512,执行步骤(14);
(14)比较当前接收帧数与当前解码帧数; (15)如果当前接收帧数与当前解码帧数之差小于最大设定值,增大播放速率,执 行步骤(18); (16)如果当前接收帧数与当前解码帧数之差大于最小设定值,减小播放速率,执 行步骤(18); (17)如果当前接收帧数与当前解码帧数之差大于最小设定值而小于最大设定值,
执行步骤(18); (18)播放语音数据。 所述的一种基于嵌入式Li皿x的语音聊天客户端的实现方法,其特征在于,步骤
5)所述的逆序丢帧检测的方式为 (1)初始化搜索变量K = 0并设置搜索长度;
(2)检测当前接收缓冲区中指针对应数据帧是否为空; (3)如果不为空,表明数据帧正常达到,则将当前缓冲区指针加l,执行步骤(1);
(4)如果为空,则将搜索变量K加1,搜索当前指针+K所对应缓冲区;
(5)检测当前指针+K所对应缓冲区是否接收到数据帧;
(6)如果没有接收到数据帧则检测是否超出了搜索长度;
(7)如果没有超出搜索长度则转至步骤(4)继续执行; (8)如果已经超出了搜索长度,则表明当前帧数据尚未到达,等待一段时间A继续 从步骤(1)开始执行; (9)如果步骤(5)中检测到当前指针+1(所对应缓冲区接收到数据帧,则表明有丢 帧或者逆序发生; (10)等待一段时间B,检测当前对应缓冲区是否接收到数据帧; (11)如果没有接收到数据帧,则表明当前帧丢失,则直接跳入到当前缓冲区指针
+1(处,从步骤(1)开始执行; (12)如果接收到数据帧,表明成功的解决了逆序的问题,此时将当前缓冲区指针 加l,从步骤(1)开始执行; 步骤(8)和步骤(10)中所述的时间A和时间B是根据现场环境设定的,数值在毫
秒量级。 本发明基于ARM9芯片S3C2440硬件平台,通过嵌入式Li皿x的音频驱动完成语音 采集播放模块的配置并向嵌入式Li皿x上层提供操作接口,语音编解码模块和语音收发模 块实现了嵌入式Li皿x网络平台的语音聊天功能。


图1为本发明基于嵌入式Li皿x的语音聊天客户端实现的结构示意图。
图2为本发明基于嵌入式Li皿x的语音聊天客户端实现的流程图。
图3为本发明语音接收流程图。
图4为本发明逆序丢帧检测流程图。 其中,1、语音聊天服务器端应用程序,2、网络地址转换,3、嵌入式系统网络终端, 3-l、语音采集模块、3-2、语音编码模块,3-3、语音发送模块,3-4、语音接收模块,3-5、语音 解码模块,3-6、语音播放模块。
具体实施方案 为使本发明的目的、技术方案和优点更加清楚,下面对照附图,对本发明实施方案 做进一步的详细描述。 —种基于嵌入式Li皿x的语音聊天客户端,客户端是一个嵌入式系统网络终端3, 在嵌入式系统网络终3端存储下述软件模块语音采集模块3-l、语音编码模块3-2、语音发 送模块3-3、语音接收模块3-4、语音解码模块3-5和语音播放模块3-6,实现客户端同时发 送接收语音的功能。 所述的嵌入式系统网络终端3的核心是ARM9系列处理芯片的S3C2440, S3C2440 与被控制的音频处理芯片UDA1341连接。
—种基于嵌入式Li皿x的语音聊天客户端的实现方法,实现方法如下 1)核心处理芯片S3C2440和音频处理芯片UDA1341初始化,设定嵌入式系统网络
终端的工作模式; 2)采集语音数据; 3)对采集的语音数据进行语音编码,在语音编码模块上建立1024个帧的缓冲区, 将采集的原始语音数据转换为MP3格式; 4)通过语音发送模块发送语音数据到互联网;通过帧缓冲的方式均衡语音编码 模块的编码速度的浮动; 5)语音接收模块通过帧缓冲、自适应调速和逆序丢帧检测的方式接收语音数据;
6)对接收的语音数据进行语音解码,在语音解码模块上建立1024个帧的缓冲区, 将接收的MP3格式语音数据转换为原始语音数据;
7)播放语音数据。 所述的一种基于嵌入式Li皿x的语音聊天客户端的实现方法,其特征在于,步骤
4) 所述的帧缓冲的方式为 (1)设置语音编码缓冲区的大小为1024个数据帧; (2)语音采集模块开始采集语音数据帧; (3)语音数据帧按照帧顺序存入到语音编码缓冲区中; (4)检测是否为开机第一次运行,如果不是则语音发送模块直接发送语音数据 帧; (5)如果是开机第一次运行,则检测编码缓冲区帧数是否达到512 ; (6)如果编码缓冲区帧数尚未达到512,则循环执行采集语音并存入语音编码缓
冲区的步骤,直到编码缓冲区的帧数达到512 ; (7)如果编码缓冲区帧数达到512,清除开机标志位,语音发送模块发送语音数据 帧; 步骤5)所述的帧缓冲方式与步骤4)所述的帧缓冲的方式相同。 所述的一种基于嵌入式Li皿x的语音聊天客户端的实现方法,其特征在于,步骤
5) 所述的自适应调速的方式是
(1)接收语音数据帧;
(2)执行丢帧逆序检测; (3)进行帧解析,并按照帧顺序存入语音接收缓冲区; (4)检测是否为第一次开机运行,如果不是第一次开机运行,则执行步骤(8); (5)如果是第一次开机运行,设置解码缓冲区大小为1024个数据帧; (6)如果语音接收缓冲区中的帧数达到512,则执行步骤(8); (7)如果语音接收缓冲区中的帧数未达到512,则执行步骤(l),直到语音接收缓
冲区中的帧数达到512,执行步骤(8); (8)解码语音数据帧; (9)按照帧顺序存入语音解码缓冲区; (10)检测是否为第一次开机运行,如果不是第一次开机运行,执行步骤(14);
(11)如果是第一次开机运行,检测语音解码缓冲区中的帧数是否达到512 ;
(12)如果语音解码缓冲区中的帧数达到512,清除开机标志,执行步骤(14);
(13)如果语音解码缓冲区中的帧数未达到512,则执行步骤(8),直到语音解码缓 冲区中的帧数达到512,执行步骤(14);
(14)比较当前接收帧数与当前解码帧数; (15)如果当前接收帧数与当前解码帧数之差小于最大设定值,增大播放速率,执 行步骤(18); (16)如果当前接收帧数与当前解码帧数之差大于最小设定值,减小播放速率,执 行步骤(18); (17)如果当前接收帧数与当前解码帧数之差大于最小设定值而小于最大设定值,
执行步骤(18); (18)播放语音数据。 所述的一种基于嵌入式Li皿x的语音聊天客户端的实现方法,其特征在于,步骤
5)所述的逆序丢帧检测的方式为 (1)初始化搜索变量K = 0并设置搜索长度; (2)检测当前接收缓冲区中指针对应数据帧是否为空; (3)如果不为空,表明数据帧正常达到,则将当前缓冲区指针加l,执行步骤(1);
(4)如果为空,则将搜索变量K加1,搜索当前指针+K所对应缓冲区;
(5)检测当前指针+K所对应缓冲区是否接收到数据帧;
(6)如果没有接收到数据帧则检测是否超出了搜索长度;
(7)如果没有超出搜索长度则转至步骤(4)继续执行; (8)如果已经超出了搜索长度,则表明当前帧数据尚未到达,等待一段时间A继续 从步骤(1)开始执行; (9)如果步骤(5)中检测到当前指针+1(所对应缓冲区接收到数据帧,则表明有丢 帧或者逆序发生; (10)等待一段时间B,检测当前对应缓冲区是否接收到数据帧; (11)如果没有接收到数据帧,则表明当前帧丢失,则直接跳入到当前缓冲区指针
+1(处,从步骤(1)开始执行; (12)如果接收到数据帧,表明成功的解决了逆序的问题,此时将当前缓冲区指针 加l,从步骤(1)开始执行; 步骤(8)和步骤(10)中所述的时间A和时间B是根据现场环境设定的,数值在毫
秒量级。
权利要求
一种基于嵌入式Linux的语音聊天客户端,其特征在于,客户端是一个嵌入式系统网络终端,在嵌入式系统网络终端存储下述软件模块语音采集模块、语音编码模块、语音发送模块、语音接收模块、语音解码模块和语音播放模块,实现客户端同时发送接收语音的功能。
2. 如权利要求l所述的一种基于嵌入式Li皿x的语音聊天客户端,其特征在于,所述的嵌入式系统网络终端的核心是ARM9系列处理芯片S3C2440, S3C2440与被控制的音频处理芯片UDA1341连接。
3. 如权利要求1所述的一种基于嵌入式Li皿x的语音聊天客户端的实现方法,其特征在于,实现方法如下1) 核心处理芯片S3C2440和音频处理芯片UDA1341初始化,设定嵌入式系统网络终端的工作模式;2) 采集语音数据;3) 对采集的语音数据进行语音编码,在语音编码模块上建立1024个帧的缓冲区,将采集的原始语音数据转换为MP3格式;4) 通过语音发送模块发送语音数据到互联网;通过帧缓冲的方式均衡语音编码模块的编码速度的浮动;5) 语音接收模块通过帧缓冲、自适应调速和逆序丢帧检测的方式接收语音数据;6) 对接收的语音数据进行语音解码,在语音解码模块上建立1024个帧的缓冲区,将接收的MP3格式语音数据转换为原始语音数据;7) 播放原始语音数据。
4. 如权利要求3所述的一种基于嵌入式Li皿x的语音聊天客户端的实现方法,其特征在于,步骤4)所述的帧缓冲的方式为(1) 设置语音编码缓冲区的大小为1024个数据帧;(2) 语音采集模块开始采集语音数据帧;(3) 语音数据帧按照帧顺序存入到语音编码缓冲区中;(4) 检测是否为开机第一次运行,如果不是则语音发送模块直接发送语音数据帧;(5) 如果是开机第一次运行,则检测编码缓冲区帧数是否达到512 ;(6) 如果编码缓冲区帧数尚未达到512,则循环执行采集语音并存入语音编码缓冲区的步骤,直到编码缓冲区的帧数达到512 ;(7) 如果编码缓冲区帧数达到512,清除开机标志位,语音发送模块发送语音数据帧;步骤5)所述的帧缓冲方式与步骤4)所述的帧缓冲的方式相同。
5. 如权利要求3所述的一种基于嵌入式Li皿x的语音聊天客户端的实现方法,其特征在于,步骤5)所述的自适应调速的方式是(1) 接收语音数据帧;(2) 执行丢帧逆序检测;(3) 进行帧解析,并按照帧顺序存入语音接收缓冲区;(4) 检测是否为第一次开机运行,如果不是第一次开机运行,则执行步骤(8);(5) 如果是第一次开机运行,设置解码缓冲区大小为1024个数据帧;(6) 如果语音接收缓冲区中的帧数达到512,则执行步骤(8);(7) 如果语音接收缓冲区中的帧数未达到512,则执行步骤(l),直到语音接收缓冲区中的帧数达到512,执行步骤(8);(8) 解码语音数据帧;(9) 按照帧顺序存入语音解码缓冲区;(10) 检测是否为第一次开机运行,如果不是第一次开机运行,执行步骤(14);(11) 如果是第一次开机运行,检测语音解码缓冲区中的帧数是否达到512 ;(12) 如果语音解码缓冲区中的帧数达到512,清除开机标志,执行步骤(14);(13) 如果语音解码缓冲区中的帧数未达到512,则执行步骤(8),直到语音解码缓冲区中的帧数达到512,执行步骤(14);(14) 比较当前接收帧数与当前解码帧数;(15) 如果当前接收帧数与当前解码帧数之差小于最大设定值,增大播放速率,执行步骤(18);(16) 如果当前接收帧数与当前解码帧数之差大于最小设定值,减小播放速率,执行步骤(18);(17) 如果当前接收帧数与当前解码帧数之差大于最小设定值而小于最大设定值,继续执行步骤(18);(18) 播放语音数据。
6.如权利要求3所述的一种基于嵌入式Li皿x的语音聊天客户端的实现方法,其特征在于,步骤5)所述的逆序丢帧检测的方式为(1) 初始化搜索变量K = 0并设置搜索长度;(2) 检测当前接收缓冲区中指针对应数据帧是否为空;(3) 如果不为空,表明数据帧正常达到,则将当前缓冲区指针加l,执行步骤(1);(4) 如果为空,则将搜索变量K加1,搜索当前指针+K所对应缓冲区;(5) 检测当前指针+K所对应缓冲区是否接收到数据帧;(6) 如果没有接收到数据帧则检测是否超出了搜索长度;(7) 如果没有超出搜索长度则转至步骤(4)继续执行;(8) 如果已经超出了搜索长度,则表明当前帧数据尚未到达,等待一段时间A继续从步骤(1)开始执行;(9) 如果步骤(5)中检测到当前指针+K所对应缓冲区接收到数据帧,则表明有丢帧或者逆序发生;(10) 等待一段时间B,检测当前对应缓冲区是否接收到数据帧;(11) 如果没有接收到数据帧,则表明当前帧丢失,则直接跳入到当前缓冲区指针+K处,从步骤(1)开始执行;(12) 如果接收到数据帧,表明成功的解决了逆序的问题,此时将当前缓冲区指针加1,从步骤(1)开始执行;步骤(8)和步骤(10)中所述的时间A和时间B是根据现场环境设定的,数值在毫秒量级。
全文摘要
一种基于嵌入式Linux的语音聊天客户端及其实现方法,属于电子信息技术领域。语音聊天客户端是一个嵌入式系统网络终端,在嵌入式系统网络终端存储下述软件模块语音采集模块、语音编码模块、语音发送模块、语音接收模块、语音解码模块和语音播放模块,实现客户端同时发送接收语音的功能。语音数据均经过软件的编解码处理,接收程序采用了帧缓冲、自适应调速和逆序丢帧检测的方式,实现在带宽相对受限的网络环境中流畅的语音聊天功能。本发明针对嵌入式系统特定的应用环境,实现了基于嵌入式Linux平台的语音聊天功能,本发明对于同类嵌入式平台,可移植性强,对于推动嵌入式网络设备的普及应用具有积极地意义。
文档编号H04L29/06GK101742006SQ20091025575
公开日2010年6月16日 申请日期2009年12月28日 优先权日2009年12月28日
发明者徐超, 林贺, 王恒, 石祚夫, 袁东风, 陈飞, 魏斌 申请人:山东大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1