一种音频输出方法及系统的制作方法

文档序号:6777627阅读:113来源:国知局
专利名称:一种音频输出方法及系统的制作方法
技术领域
本发明涉及语音通信技术领域,尤其涉及一种音频输出方法及系统。
背景技术
现有技术在实现音频解码输出时,一般由中央处理单元(CPU,CentralProcessing Unit)/数字信号处理器(DSP,Digital Signal Processor)将解码后左右声道的数字音频信号(PCM,Pulse Code Modulation)进行交错后写入输出缓冲单元,然后由直接内存访问单元(DMA,Direct Memory Access)将其读出,并发送给音频数字/模拟转换器(Audio DAC,Audio Digital/Analog Converter),由Audio DAC将所述PCM数据转换为音频模拟信号,再通过扬声器输出给用户。
现有技术音频解码输出过程中,如对音频格式为WMA(Windows MediaAudio)的音频解码,由于对WMA格式的当前帧编码数据进行解码时,DMA需要始终从输出缓冲单元读取前一帧数据,因此,为CPU控制简便的目的,一般使用回转式缓冲单元(Ping-Pong Buffer),该回转型缓冲单元共有两个缓冲单元,分别为输出缓冲单元0和输出缓冲单元1,当输出缓冲单元0中存放了由CPU写入的第一帧双声道PCM数据后,DMA从输出缓冲单元0中读取数据,并发送给Audio DAC,Audio DAC完成数字/模拟(D/A)转换,获得音频模拟信号,该音频模拟信号经过功率放大后由扬声器输出给用户,而此时CPU正在对第二帧音频压缩码流数据进行解码,获得所述第二帧的PCM数据,并将该数据从工作缓冲单元(Working Buffer)中读出,并进行双声道交错后发送到输出缓冲单元1中,当所述DMA将输出缓冲单元0中的数据读取完以后,将立刻开始从输出缓冲单元1中读取数据,以保证扬声器播放声音的连贯性,此时,CPU可以开始对第三帧音频压缩码流数据进行解码,获得所述第三帧的PCM数据,并将该数据从工作缓冲单元(Working Buffer)中读出,并进行双声道交错后发送到输出缓冲单元0中,当DMA从输出缓冲单元1读取数据完毕后,再从输出缓冲单元0开始读取数据,也就是说,在WMA软件解码过程中,所有交错后奇数帧的双声道PCM数据都存放在输出缓冲单元0中,所有交错后偶数帧的双声道PCM数据都存放在输出缓冲单元1中,DMA交替地从输出缓冲单元0和输出缓冲单元1中读取数据,CPU和DMA只能分别对不同的输出缓冲单元进行操作,而不会在某个时刻同时对输出缓冲单元0或输出缓冲单元1进行操作。
这种回转式缓冲单元的结构虽然简单,但两个缓冲单元输出缓冲单元0和输出缓冲单元1的长度都需要为一帧双声道PCM数据的长度,对于双声道音频数据,一个声道最大的帧长为2048点,那么,一个输出缓冲单元就需要容纳4096PCM采样点,回转式缓冲单元就需要容纳8192PCM采样点,在16位的处理模式下,需要占用内存16KB,对于更高精度的24位的处理模式,则需要占用内存24KB。因此,现有音频输出系统,无法通过减小音频解码时所占用的输出缓冲单元来降低系统成本。
综上,现有技术在实现音频输出的过程中,占用输出缓冲单元过大,音频输出系统成本高。

发明内容
本发明提供一种音频输出方法及系统,用以解决现有技术在实现音频输出过程中,占用输出缓冲单元过大以及音频输出系统成本较高的问题。
本发明方法包括A.将一帧数字音频信号数据写入缓冲单元,从所述缓冲单元中交错读取该帧第一声道和第二声道的数字音频信号数据,并写入第一输出缓冲单元;B.从所述第一输出缓冲单元中读取数据并输出。
所述步骤A中所述缓冲单元包括第二输出缓冲单元和工作缓冲单元,所述第二输出缓冲单元的存储量为所述第一输出缓冲单元的一半。
步骤A包括A1、将交错后的第一帧数字音频信号数据写入第一输出缓冲单元;A2、从第二帧数字音频信号数据开始的每帧数字音频信号数据,将第一声道的数字音频信号数据写入第二输出缓冲单元,并将第二声道的数字音频信号数据保存在工作缓冲单元;A3、根据当前所述第一输出缓冲单元中的数据的已读取的数据量,将所述第一声道的数字音频信号数据和第二声道的数字音频信号数据进行交错并写入所述第一输出缓冲单元。
预先设置一指针,用于指向所述第一输出缓冲单元中读取数据的位置,所述指针的值为所述读取数据的地址;所述步骤B中,根据所述指针的值,从所述第一输出缓冲单元中读取数据,其中,所述指针的初始值为所述第一输出缓冲单元的首地址,当所述指针的值为所述第一输出缓冲单元的末地址时,所述指针的值重新等于所述第一输出缓冲单元的首地址。
步骤A3包括A31、获得每隔一段时间所述指针的值的变化量;A32、根据所述变化量将所述第一声道的数字音频信号数据和第二声道的数字音频信号数据进行交错,并写入所述第一输出缓冲单元。
本发明系统包括中央处理单元、第一输出缓冲单元、缓冲单元和直接内存访问单元;所述中央处理单元,用于将一帧数字音频信号数据写入缓冲单元,从所述缓冲单元中交错读取该帧第一声道和第二声道的数字音频信号数据,并写入第一输出缓冲单元;所述直接内存访问单元,用于从所述第一输出缓冲单元中读取数据并输出。
所述缓冲单元包括第二输出缓冲单元和工作缓冲单元,所述第二输出缓冲单元的存储量为所述第一输出缓冲单元的一半。
所述中央处理单元包括第一单元,用于将交错后的第一帧数字音频信号数据写入第一输出缓冲单元;第二单元,用于从第二帧数字音频信号数据开始的每帧数字音频信号数据,将第一声道的数字音频信号数据写入第二输出缓冲单元,并将第二声道的数字音频信号数据写入所述工作缓冲单元;第三单元,用于根据当前所述第一输出缓冲单元中已读取的数据量,将所述第一声道的数字音频信号数据和第二声道的数字音频信号数据进行交错并写入所述第一输出缓冲单元。
所述直接内存访问单元,用于根据预先设置的指针的值,读取并输出所述第一输出缓冲单元中的数据;所述指针的值为读取数据的地址,所述指针的初始值为所述第一输出缓冲单元的首地址,当所述指针的值为所述第一输出缓冲单元的末地址时,所述指针的值重新等于所述第一输出缓冲单元的首地址。
所述第三单元包括变化量单元,用于获得每隔一段时间所述指针的值的变化量;写入数据单元,用于根据所述变化量将所述第一声道的数字音频信号数据和第二声道的数字音频信号数据进行交错,并写入所述第一输出缓冲单元。
本发明通过将一帧数字音频信号数据写入缓冲单元,从所述缓冲单元中交错读取该帧第一声道和第二声道的数字音频信号数据,并写入第一输出缓冲单元,从所述第一输出缓冲单元中读取数据并输出的技术方案,避免了现有技术音频解码输出需要占用两个一帧双声道数据长度的输出缓冲单元,减小了音频输出过程中需要占用的输出缓冲单元,降低了音频输出系统的成本。


图1为本发明方法的流程示意图;图2为本发明方法具体实施方式
的流程示意图;图3为本发明系统的结构示意图。
具体实施例方式
本发明的核心思想为通过将一帧数字音频信号数据写入缓冲单元,从所述缓冲单元中交错读取该帧第一声道和第二声道的数字音频信号数据,并写入第一输出缓冲单元,从所述第一输出缓冲单元中读取数据并输出,避免了现有技术音频解码输出需要占用两个双声道帧长的输出缓冲单元,减小了音频输出过程中需要占用的输出缓冲单元,降低了音频输出系统的成本;其中,所述缓冲单元包括第二输出缓冲单元和工作缓冲单元,所述第二输出缓冲单元的存储量为所述第一输出缓冲单元的一半,即只能存储一帧一个声道的数据,而该帧另外一个声道的PCM数据仍保留在Working Buffer中,CPU根据当前DMA指向缓冲单元中的指针的值,将该帧两个声道的PCM数据进行交错后发送给输出缓冲单元0;这样就避免了现有技术音频解码需要占用两个双声道帧长的输出缓冲单元,而只需使用1.5个双声道帧长的输出缓冲单元,与现有技术相比,音频输出过程中所占用的输出缓冲单元减少了25%,降低了音频输出系统的成本。
参见图1,本发明方法包括S101、CPU/DSP将一帧数字音频信号数据写入缓冲单元,从所述缓冲单元中交错读取该帧第一声道和第二声道的数字音频信号数据,并写入第一输出缓冲单元;所述缓冲单元包括第二输出缓冲单元和工作缓冲单元,所述第二输出缓冲单元的存储量为所述第一输出缓冲单元的一半;
较佳地,本步骤包括步骤一将交错后的第一帧数字音频信号数据写入第一输出缓冲单元;步骤二从第二帧数字音频信号数据开始的每帧数字音频信号数据,将第一声道的数字音频信号数据写入第二输出缓冲单元,并将第二声道的数字音频信号数据保存在工作缓冲单元;步骤三根据当前所述第一输出缓冲单元中的数据的已读取的数据量,将所述第一声道的数字音频信号数据和第二声道的数字音频信号数据进行交错并写入所述第一输出缓冲单元;S102、DMA从所述第一输出缓冲单元中读取数据并输出;较佳地,预先设置一指针,用于指向所述第一输出缓冲单元中读取数据的位置,所述指针的值为所述读取数据的地址;根据所述指针的值,从所述第一输出缓冲单元中读取数据,其中,所述指针的初始值为所述第一输出缓冲单元的首地址,当所述指针的值为所述第一输出缓冲单元的末地址时,所述指针的值重新等于所述第一输出缓冲单元的首地址;则,步骤三包括获得每隔一段时间所述指针的值的变化量;根据所述变化量将所述第一声道的数字音频信号数据和第二声道的数字音频信号数据进行交错,并写入所述第一输出缓冲单元。
参见图2,本发明方法的具体实施例包括步骤S201、CPU对输入的音频压缩码流数据的第一帧双声道数据进行解码,获得第一帧双声道PCM数据;S202、CPU将第一帧双声道PCM数据进行交错,并将所述交错后的PCM数据发送给输出缓冲单元0,然后启动DMA;所述输出缓冲单元0存储所述第一帧双声道PCM数据;设该双声道PCM数据的长度为2L,相应的,输出缓冲单元0的长度也为2L;所述DMA一旦启动,就会不停的按系统的输出采样率(Output SamplingRate)从输出缓冲单元0中读取数据,并发送给Audio DAC,Audio DAC将该数据转换成模拟信号,经过功率放大后由扬声器输出给用户,直到本音频压缩码流全部解完,由CPU将DMA和Audio DAC关闭为止。
S203、CPU对下一帧声道0的音频压缩码流数据进行解码;S204、CPU将所述下一帧声道0的PCM数据发送给输出缓冲单元1;所述输出缓冲单元1存储所述下一帧声道0的PCM数据;设所述下一帧声道0的PCM数据的长度为L,相应的,输出缓冲单元1的长度也为L;所述CPU将所述下一帧声道0的PCM数据全部发送给所述输出缓冲单元1后,开始对所述下一帧声道1的音频压缩码流数据进行解码;CPU完成下一帧声道1的音频解码后,将所述下一帧声道1的PCM数据仍保留在Working Buffer中,所述Working Buffer为工作缓冲单元;S205、CPU根据当前DMA对输出缓冲单元0的操作指针P0的值,将所述下一帧声道0的PCM数据和所述下一帧声道1的PCM数据进行交错后发送给输出缓冲单元0;其中,所述下一帧声道0的PCM数据存储在输出缓冲单元1中;所述下一帧声道1的PCM数据存储在Working Buffer中;当所述CPU完成对所述下一帧声道1的音频压缩码流数据的解码后,读取DMA当前对输出缓冲单元0的操作指针的值P0,并用它减去输出缓冲单元0的首地址,即得到当前DMA从所述输出缓冲单元0中已读取的数据量,设该数据量为N0,那么,所述CPU就将所述输出缓冲单元1中的所述下一帧声道0的PCM数据和所述Working Buffer中的所述下一帧声道1的PCM数据进行交错并发送给所述输出缓冲单元0,该发送的数据量与所述已读取的数据量N0相同,以避免覆盖还未被DMA读取的数据;
然后,所述CPU再读取DMA当前对输出缓冲单元0的操作指针的值P1,并用它减去所述P0,得到差值N1,那么,所述CPU就再将所述输出缓冲单元1中的所述下一帧声道0的PCM数据和所述Working Buffer中的所述下一帧声道1的PCM数据进行交错并发送给所述输出缓冲单元0,该发送的数据量为N1,直到所述下一帧交错后的数据全部发送到所述输出缓冲单元0,此时,DMA又从所述输出缓冲单元0的首地址开始读取数据,即返回步骤S203继续执行,也就是说,从第二帧PCM数据开始的每一帧PCM数据的处理过程都是一样的。
参见图3,本发明系统的具体实施例,用于对WMA格式的音频数据进行解码并输出,该系统包括中央处理单元301、第一输出缓冲单元302、缓冲单元303、直接内存访问单元304、音频数字/模拟转换器305及扬声器306;所述中央处理单元301包括第一单元3011、第二单元3012和第三单元3013;所述第三单元3013包括变化量单元30131和写入数据单元30132;所述缓冲单元303包括第二输出缓冲单元3031和工作缓冲单元3032;其中,假设每一帧双声道的所述WMA格式的音频数据的长度为2L,则所述第一输出缓冲单元302的长度为2L,所述第二输出缓冲单元3031的长度为L;所述中央处理单元301,将一帧数字音频信号数据写入缓冲单元303,从所述缓冲单元303中交错读取该帧第一声道和第二声道的数字音频信号数据,并写入第一输出缓冲单元302;所述直接内存访问单元304,从所述第一输出缓冲单元302中读取数据并输出;其中,所述第一单元3011,用于将交错后的第一帧数字音频信号数据写入第一输出缓冲单元302;所述第二单元3012,用于从第二帧数字音频信号数据开始的每帧数字音频信号数据,将第一声道的数字音频信号数据写入第二输出缓冲单元3031,并将第二声道的数字音频信号数据写入所述工作缓冲单元3032;所述第三单元3013,用于根据当前所述第一输出缓冲单元302中已读取的数据量,将所述第一声道的数字音频信号数据和第二声道的数字音频信号数据进行交错并写入所述第一输出缓冲单元302;较佳地,所述直接内存访问单元304,根据预先设置的指针的值,读取并输出所述第一输出缓冲单元302中的数据;所述指针的值为读取数据的地址,所述指针的初始值为所述第一输出缓冲单元302的首地址,当所述指针的值为所述第一输出缓冲单元302的末地址时,所述指针的值重新等于所述第一输出缓冲单元302的首地址;所述音频数字/模拟转换器305,接收所述直接内存访问单元304发送的数据,并将该数据转换成模拟信号,所述的模拟信号经过功率放大后由所述扬声器306输出给用户,实现音频输出。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。
权利要求
1.一种音频输出方法,其特征在于,该方法包括步骤A.将一帧数字音频信号数据写入缓冲单元,从所述缓冲单元中交错读取该帧第一声道和第二声道的数字音频信号数据,并写入第一输出缓冲单元;B.从所述第一输出缓冲单元中读取数据并输出。
2.如权利要求1所述的方法,其特征在于,所述步骤A中所述缓冲单元包括第二输出缓冲单元和工作缓冲单元,所述第二输出缓冲单元的存储量为所述第一输出缓冲单元的一半。
3.如权利要求2所述的方法,其特征在于,步骤A包括A1、将交错后的第一帧数字音频信号数据写入第一输出缓冲单元;A2、从第二帧数字音频信号数据开始的每帧数字音频信号数据,将第一声道的数字音频信号数据写入第二输出缓冲单元,并将第二声道的数字音频信号数据保存在工作缓冲单元;A3、根据当前所述第一输出缓冲单元中的数据的已读取的数据量,将所述第一声道的数字音频信号数据和第二声道的数字音频信号数据进行交错并写入所述第一输出缓冲单元。
4.如权利要求3所述的方法,其特征在于,预先设置一指针,用于指向所述第一输出缓冲单元中读取数据的位置,所述指针的值为所述读取数据的地址;所述步骤B中,根据所述指针的值,从所述第一输出缓冲单元中读取数据,其中,所述指针的初始值为所述第一输出缓冲单元的首地址,当所述指针的值为所述第一输出缓冲单元的末地址时,所述指针的值重新等于所述第一输出缓冲单元的首地址。
5.如权利要求4所述的方法,其特征在于,步骤A3包括A31、获得每隔一段时间所述指针的值的变化量;A32、根据所述变化量将所述第一声道的数字音频信号数据和第二声道的数字音频信号数据进行交错,并写入所述第一输出缓冲单元。
6.一种音频输出系统,其特征在于,该系统包括中央处理单元、第一输出缓冲单元、缓冲单元和直接内存访问单元;所述中央处理单元,用于将一帧数字音频信号数据写入缓冲单元,从所述缓冲单元中交错读取该帧第一声道和第二声道的数字音频信号数据,并写入第一输出缓冲单元;所述直接内存访问单元,用于从所述第一输出缓冲单元中读取数据并输出。
7.如权利要求6所述的系统,其特征在于,所述缓冲单元包括第二输出缓冲单元和工作缓冲单元,所述第二输出缓冲单元的存储量为所述第一输出缓冲单元的一半。
8.如权利要求7所述的系统,其特征在于,所述中央处理单元包括第一单元,用于将交错后的第一帧数字音频信号数据写入第一输出缓冲单元;第二单元,用于从第二帧数字音频信号数据开始的每帧数字音频信号数据,将第一声道的数字音频信号数据写入第二输出缓冲单元,并将第二声道的数字音频信号数据写入所述工作缓冲单元;第三单元,用于根据当前所述第一输出缓冲单元中已读取的数据量,将所述第一声道的数字音频信号数据和第二声道的数字音频信号数据进行交错并写入所述第一输出缓冲单元。
9.如权利要求8所述的系统,其特征在于,所述直接内存访问单元,用于根据预先设置的指针的值,读取并输出所述第一输出缓冲单元中的数据;所述指针的值为读取数据的地址,所述指针的初始值为所述第一输出缓冲单元的首地址,当所述指针的值为所述第一输出缓冲单元的末地址时,所述指针的值重新等于所述第一输出缓冲单元的首地址。
10.如权利要求6所述的系统,其特征在于,所述第三单元包括变化量单元,用于获得每隔一段时间所述指针的值的变化量;写入数据单元,用于根据所述变化量将所述第一声道的数字音频信号数据和第二声道的数字音频信号数据进行交错,并写入所述第一输出缓冲单元。
全文摘要
本发明公开了一种音频输出方法及系统,用以解决现有技术在实现音频输出过程中,占用输出缓冲单元过大,音频输出系统成本较高的问题。本发明方法包括步骤A.将一帧数字音频信号数据写入缓冲单元,从所述缓冲单元中交错读取该帧第一声道和第二声道的数字音频信号数据,并写入第一输出缓冲单元;B.从所述第一输出缓冲单元中读取数据并输出。本发明还公开了一种音频输出系统。本发明用于音频输出,减小音频输出过程中所占用的输出缓冲单元,降低了音频输出系统的成本。
文档编号G11B20/10GK101030131SQ200710063429
公开日2007年9月5日 申请日期2007年1月31日 优先权日2007年1月31日
发明者侯培新 申请人:北京中星微电子有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1