多程序共享音频设备的方法

文档序号:6472348阅读:235来源:国知局
专利名称:多程序共享音频设备的方法
技术领域
本发明涉及嵌入式操作系统环境下的音频设备访问技术,特别涉及一种多个程序共享音 频设备的方法。
背景技术
在嵌入式操作系统下,音频程序对音频设备的访问方式都是独占式访问, 一个音频程序 打开了音频设备,其它音频程序都无法打开音频设备。音频程序对音频设备的独占式访问会 导致在该系统中多个音频程序无法同时获取音频输出资源,只有当前音频程序释放掉音频设 备,其它音频程序才能访问音频设备。

发明内容
本发明所要解决的技术问题是,提供一种实现多个程序同时访问音频设备的多程序共享 音频设备的方法。
本发明解决所述技术问题采用的技术方案是,多程序共享音频设备的方法,其特征在于 ,设置音频服务模块,所述音频服务模块执行下列步骤
al、初始化音频设备,创建至少2个声音数据通道,音频程序独占式访问所述声音数据 通道;
a2、循环检测各声音数据通道是否有声音数据输出,若是,则读取声音数据,并进行音 频参数归一化处理后进入步骤a3;否则重复步骤a2;
a3、将各声音数据通道的声音数据叠加合成输出到音频设备;
所述声音数据通道执行下列步骤
bl、声音数据通道初始化;
b2、音频程序向声音数据通道输入声音数据音。
进一步的,所述步骤a2中,音频参数归一化处理为若声音数据通道的通道音频参数与 初始化音频设备的音频设备配置参数不一致,则声音数据通道对声音数据重采样,使通道音 频参数与音频设备配置参数一致;
进一步的,所述声音数据通道包括数据区、通道控制信息区、服务控制信息区,音频程 序的声音数据存放在所述数据区;通道开启标志、通道的写信息、通道音频参数存放在所述 通道控制信息区;音频设备配置参数、通道的读信息存放在所述服务控制信息区;进一步的,所述步骤b2包括下列步骤
① 根据通道控制信息区和服务控制信息区的信息决定可用数据区大小,音频程序输入所 述可用数据区大小的声音数据到声音数据通道的数据区,并更新通道控制信息区的信息;
② 重复步骤①,直到音频程序的所有声音数据都输入完毕;
进一步的,所述各声音数据通道还执行步骤b3:判断是否再无声音数据输出,若是,则 关闭通道开启标志;
所述音频服务模块还执行下步骤a4:根据通道开启标志判断是否关闭声音数据通道,若 是,则关闭,并返回步骤a2。
本发明的有益效果是,多个程序可以同时、透明访问同一音频设备,提供了一个嵌入式 系统中音频设备共享的中间件。


图l是本发明具体实施方式
的流程图。
具体实施例方式
以下结合具体实施方式
和附图,对本发明作进一步说明。
在现有的嵌入式操作系统基础上,增加一个音频服务模块,该音频服务模块对音频设备 进行独占式访问。音频服务模块创建至少2个声音数据通道,并对所创建的声音数据通道的 数据进行控制和处理;音频程序对声音数据通道进行独占式访问。频程序根据音频服务模块 的控制参数定期定量的向声音数据通道输入声音数据,然后音频服务模块将各声音数据通道 的声音数据进行转换、叠加合成等处理,变成统一声音数据最终输出到音频设备。
参见图l,音频服务模块的工作流程如下
音频服务模块预先启动,初始化音频设备(独占音频设备缓冲区)。创建声音数据通道 1、声音数据声音数据通道2……声音数据通道n,分配声音数据通道l、声音数据通道2…… 声音数据通道n的数据区、通道控制信息区及服务控制信息区,通道控制信息区的信息包括 通道开启标志、通道的写信息(通道当前滑动窗口写起始、通道当前已写数据量)、通道音 频参数(通道数据采样率、通道数据声道数、通道数据采样大小);服务控制信息区的信息 包括音频设备配置参数(设备数据采样率、设备数据声道数、设备数据采样大小)、通道的 读信息(服务进程当前滑动窗口读起始、服务进程当前已读数据量、缓冲区大小),将当前 音频设备的配置参数(设备数据采样率、设备数据声道数、设备数据采样大小)填写到服务 控制信息区,初始化当前服务进程当前滑动窗口读起始为O,服务进程当前已读数据量为O; 缓冲区大小为通道的数据区大小;初始化通道控制信息区中的通道开启标志为O。音频服务模块进入待命状态通过通道控制信息区中的通道开启标志循环检测每个声音 数据通道的开启状态(通道开启标志为l,则表示开启;通道开启标志为0,则表示未开启。 )。如果有声音数据通道开启,则执行帧输出处理,完成后回到待命状态;如果无通道开启 ,则继续停留在待命状态;如果有声音数据通道的通道开启标志由1变为0,则清除其通道控 制信息区和服务控制信息区的信息,关闭该声音数据通道,并继续停留在待命状态。音频服 务模块也可以直接根据各声音数据通道的通道控制信息区、服务控制信息区的信息直接判断 是否关闭该声音数据通道,若果是,则清除其通道控制信息区和服务控制信息区的信息,关 闭该声音数据通道,并继续停留在待命状态。当系统需要关闭,则音频服务模块关闭音频设 备,并退出。
对声音数据通道执行帧输出处理为如果声音数据通道l开启,则从声音数据通道l的数 据区中服务进程滑动窗口当前读起始位置读取一帧的数据(通道当前已写数据量与服务进程 当前已经读取数据量之差,即为当前可供服务进程可以读取的数据量。 一帧数据默认可以选 择为2048字节,通道控制模块一次至少写2帧数据,即滑动窗口大小可以选择为4096字节) 到音频服务模块的数据缓冲区,并更新服务进程当前已读数据量、将服务进程滑动窗口当前 读起始位置移动到下一帧数据的位置;如果声音数据通道l的通道控制信息区中的通道音频 参数与服务控制信息区中的音频设备配置参数不一致,则对声音数据通道l的帧数据进行频 率重采样等音频参数归一化处理,使通道音频参数与音频设备配置参数一致。音频服务模块 每读一帧声音数据通道的数据区的声音数据,就判断其是否需要进行音频参数归一化处理。 若声音数据通道l的通道当前已写数据量与服务进程当前已经读取数据量之差为零,说明声 音数据通道l目前为暂停状态,没有声音数据输入,则音频服务模块产生数据全部为零的静 音数据帧,该数据帧即被认为是声音数据通道l本次的输入数据。从声音数据通道n读取声音 数据的与上述读取声音数据通道l的方法相同。音频服务模块将已开启的声音数据通道l、声 音数据通道2……及声音数据通道n (音频参数归一化处理后)的帧数据进行叠加合成为一帧 音频数据,输出到音频设备缓冲区中由音频设备输出。如果声音数据通道的可用声音数据量 大于一帧数据,那么循环执行帧输出处理。
比如音频服务模块将音频设备初始化成如下工作模式采样率44. 1KHZ,每个采样大小 16比特,双声道;音频程序A占用声音数据通道1,音频程序A将要播放的音频数据的参数为 :采样率44. 1KHZ,每个采样大小16比特,双声道;音频程序B占用声音数据声音数据通道2 ,音频程序B将要播放的音频数据的参数为采样率24KHZ,每个采样大小16比特,单声道, 那么在帧输出处理时,对声音数据声音数据通道2的声音数据进行音频参数归一化处理软件重新采样到44. 1KHZ,采样后复制声道数据,将单声道数据合成为双声道数据;最后,将 声音数据通道1的数据与处理后的声音数据通道2的数据,进行加法操作叠加并进行溢出处理 ,送到音频设备输出,音频设备听到的就是两个通道叠加合成后的数据了。
参见图l,声音数据通道的工作流程为音频程序A访问音频声音数据通道1,音频声音 数据通道l初始化获取音频服务模块预先为声音数据通道l分配的数据区、通道控制信息区
及服务控制信息区地址,并将其通道音频参数(通道数据采样率、通道数据声道数、通道数
据采样大小)填写到声音数据通道l的通道控制信息区中。音频程序A向声音数据通道1输入
声音数据为声音数据通道l的控制模块根据声音数据通道l的通道当前已写数据量、服务进 程当前已读数据量及通道数据区大小,计算出声音数据通道l的当前通道滑动窗口可用数据 区大小如果可用数据区大小大于零,则音频程序A输入该可用数据区大小的声音数据到声 音数据通道l的数据区的缓冲区中,并更新声音数据通道l的通道当前已写数据量、将通道当 前滑动窗口写起始移动到下一帧数据的位置;反复执行上述操作,直到音频程序A本次需要
输入的所有声音数据(一般每次循环输入的声音数据的数据量为滑动窗口大小,即可保证人 耳听到的声音是连续的)都输入完毕。如果声音数据通道l中再无声音数据需要输出,则关
闭声音数据通道i的通道开启标志,即将通道开启标志设为o,并将通道的写信息、通道音频
参数清除。如果可用数据区大小小于零,则表示音频服务模块还未将当前通道滑动窗口中的
声音数据输出,声音数据通道i进入等待状态,等待指定时间后(比如io毫秒),重新工作
。向声音数据通道n输入声音数据的工作流程与声音数据通道l相同。若声音数据通道中有声 音数据需要输出,则将其通道开启标志设为l。
经实验验证,本发明能够有效解决嵌入式系统音频设备独占性,方便实现设备在多程序 间的透明共享。本发明提供了一个嵌入式系统中音频设备共享的中间件。
例如,将本发明应用在车载导航终端上。车载导航终端具有语音播报路名和音乐播放的 功能。在实时导航过程中,打开音乐播放功能;后台播放音乐,前台显示导航画面,同时导 航软件在需要播报语音路名时,并不会因为音频设备冲突而需要暂停掉音乐播放,播放完路 名后再恢复音乐播放,而是通过本发明共享音频设备,音乐播放和语音路名播放可以同时叠 加进行。在具体实施中,又音频服务模块创建2个声音数据通道,并定义每个声音数据通道 的音量增益功能。音乐播放占用声音数据通道l,语音路名播报占用声音数据通道2,只有声 音数据通道1或2工作时,该通道的音量为100%,当两个声音数据通道同时工作时,声音数 据通道1的音量变为20%,声音数据通道2的音量为80%。这样虽然音乐和语音路名声音数据 进行了叠加,但是听上去的效果是音乐声音小下去了,而语音路名播报的音量就相对更大更清晰了。
权利要求
1.多程序共享音频设备的方法,其特征在于,设置音频服务模块,所述音频服务模块执行下列步骤a1、初始化音频设备,创建至少2个声音数据通道,音频程序独占式访问所述声音数据通道;a2、循环检测各声音数据通道是否有声音数据输出,若是,则读取声音数据,并进行音频参数归一化处理后进入步骤a3;否则重复步骤a2;a3、将各声音数据通道的声音数据叠加合成输出到音频设备;所述声音数据通道执行下列步骤b1、声音数据通道初始化;b2、音频程序向声音数据通道输入声音数据。
2. 如权利要求l所述的多程序共享音频设备的方法,其特征在于,所 述步骤a2中,音频参数归一化处理为若声音数据通道的通道音频参数与初始化音频设备的 音频设备配置参数不一致,则声音数据通道对声音数据重采样,使通道音频参数与音频设备 配置参数一致。
3. 如权利要求1或2所述的多程序共享音频设备的方法,其特征在于 ,所述声音数据通道包括数据区、通道控制信息区、服务控制信息区,音频程序的声音数据 存放在所述数据区;通道开启标志、通道的写信息、通道音频参数存放在所述通道控制信息 区;音频设备配置参数、通道的读信息存放在所述服务控制信息区。
4.如权利要求3所述的多程序共享音频设备的方法,其特征在于,所 述步骤b2包括下列步骤① 根据通道控制信息区和服务控制信息区的信息决定可用数据区大小,音频程序输入 所述可用数据区大小的声音数据到声音数据通道的数据区,并更新通道控制信息区的信息;② 重复步骤①,直到音频程序的所有声音数据都输入完毕。
5.如权利要求3所述的多程序共享音频设备的方法,其特征在于,所 述各声音数据通道还执行步骤b3:判断是否再无声音数据输出,若是,则关闭通道开启标志所述音频服务模块还执行步骤a4:根据通道开启标志判断是否关闭声音数据通道,若 是,则关闭,并返回步骤a2。
6.如权利要求3所述的多程序共享音频设备的方法,其特征在于,所 述通道音频参数包括通道数据采样率、通道数据声道数、通道数据采样大小;所述音频设备 配置参数包括设备数据采样率、设备数据声音道数、设备数据采样大小。
全文摘要
本发明涉及嵌入式操作系统环境下的音频设备访问技术。本发明针对音频程序对音频设备的独占式访问导致的问题,公开了一种多程序共享音频设备的方法。本发明的技术方案为由设置的音频服务模块初始化音频设备,并创建至少2个声音数据通道,音频程序对其独占式访问;各声音数据通道初始化,音频程序向其输入声音数据;循环检测各声音数据通道是否有声音数据输出,若是,则读取声音数据,并进行音频参数归一化处理;否则继续循环检测各声音数据通道是否有声音数据输出;将各声音数据通道的声音数据叠加合成输出到音频设备。本发明用于嵌入式系统的音频设备,其有益效果是,多个程序可以同时、透明地访问同一音频设备。
文档编号G06F3/16GK101286114SQ20081030147
公开日2008年10月15日 申请日期2008年5月8日 优先权日2008年5月8日
发明者廖福成 申请人:四川长虹电器股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1