CN100507826C - 一种音频输出方法及系统 - Google Patents
一种音频输出方法及系统 Download PDFInfo
- Publication number
- CN100507826C CN100507826C CNB2007100634308A CN200710063430A CN100507826C CN 100507826 C CN100507826 C CN 100507826C CN B2007100634308 A CNB2007100634308 A CN B2007100634308A CN 200710063430 A CN200710063430 A CN 200710063430A CN 100507826 C CN100507826 C CN 100507826C
- Authority
- CN
- China
- Prior art keywords
- buffer cell
- output buffer
- data
- digital audio
- frame
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
- 238000000034 method Methods 0.000 title claims abstract description 40
- 230000005236 sound signal Effects 0.000 claims abstract description 40
- 230000006835 compression Effects 0.000 description 10
- 238000007906 compression Methods 0.000 description 10
- 238000010586 diagram Methods 0.000 description 3
- 238000012986 modification Methods 0.000 description 3
- 230000004048 modification Effects 0.000 description 3
- 238000005516 engineering process Methods 0.000 description 2
- 230000003321 amplification Effects 0.000 description 1
- 230000003139 buffering effect Effects 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 230000006837 decompression Effects 0.000 description 1
- 238000003199 nucleic acid amplification method Methods 0.000 description 1
Images
Landscapes
- Signal Processing For Digital Recording And Reproducing (AREA)
Abstract
本发明公开了一种音频输出方法及系统,用以解决现有技术在实现音频输出过程中,占用输出缓冲单元过大的问题。本发明方法包括:A.将数字音频信号数据写入输出缓冲单元;B.从所述输出缓冲单元中交错读取同一帧的第一声道和第二声道的数字音频信号数据,将该数字音频信号数据输出。本发明系统包括:中央处理单元、输出缓冲单元和直接内存访问单元,所述中央处理单元,用于将数字音频信号数据写入所述输出缓冲单元;所述直接内存访问单元,用于从所述输出缓冲单元中交错读取同一帧的第一声道和第二声道的数字音频信号数据,将该数字音频信号数据输出。本发明用于音频输出,减小音频输出过程中所占用的输出缓冲单元,降低音频输出系统成本。
Description
技术领域
本发明涉及语音通信技术领域,尤其涉及一种音频输出方法及系统。
背景技术
现有技术在实现音频解码输出时,一般由中央处理单元(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(Buffer 0)和输出缓冲单元1(Buffer1),当输出缓冲单元0中存放了由CPU写入的第一帧双声道PCM数据后,DMA从输出缓冲单元0中读取数据,发送给Audio DAC,Audio DAC完成数字/模拟(D/A)转换,获得音频模拟信号,该音频模拟信号经过功率放大后由扬声器输出给用户,而此时CPU正在对第二帧音频压缩码流数据进行解码,获得所述第二帧的PCM数据,并将该数据从工作缓冲单元(Working Buffer)中读出,进行双声道交错后发送到输出缓冲单元1中,当所述DMA将输出缓冲单元0中的数据读取完以后,将立刻开始从输出缓冲单元1中读取数据,以保证扬声器播放声音的连贯性,此时,CPU可以开始对第三帧音频压缩码流数据进行解码,获得所述第三帧的PCM数据,并将该数据从工作缓冲单元(WorkingBuffer)中读出,进行双声道交错后发送到输出缓冲单元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中所述将第一帧数字音频信号数据写入输出缓冲单元的步骤为:
将第一帧第一声道的数字音频信号数据写入第一输出缓冲单元,将所述第一帧第二声道的数字音频信号数据写入第二输出缓冲单元;
所述第一输出缓冲单元和第二输出缓冲单元中的每一输出缓冲单元只能缓冲一帧数字音频信号中的一个声道的数据量。
所述步骤A中所述从第二帧数字音频信号数据开始,根据所述输出缓冲单元中的数据被读取的数据量,将每帧数字音频信号数据写入输出缓冲单元的步骤为:
A1、当所述第一输出缓冲单元和第二输出缓冲单元的前半个区间的数据已全部被读取时,将一帧第一声道的前半部分和后半部分数字音频信号数据分别写入所述第一输出缓冲单元和第二输出缓冲单元的前半个区间;
A2、根据所述第一输出缓冲单元的后半个区间中的数据已被读取的数据量,将所述一帧第二声道的前半部分数字音频信号数据写入所述第一输出缓冲单元的后半个区间;
A3、当所述第二输出缓冲单元的后半个区间中的数据已全部被读取时,将所述第二声道的后半部分数字音频信号数据写入所述第二输出缓冲单元的后半个区间;
A4、当所述第一输出缓冲单元中的数据全部被读取时,将下一帧第一声道的数字音频信号数据写入所述第一输出缓冲单元中;
A5、根据所述第二输出缓冲单元中的数据已被读取的数据量,将所述下一帧第二声道的数字音频信号数据写入所述第二输出缓冲单元中。
预先设置两个指针,用于指向所述输出缓冲单元中读取数据的位置,所述指针的值为所述读取数据的地址;
所述步骤B中,通过预先设置的第一指针从所述输出缓冲单元中读取同一帧第一声道的数字音频信号数据,通过预先设置的第二指针从所述输出缓冲单元中读取所述同一帧第二声道的数字音频信号数据,其中,所述第一指针和所述第二指针交替读取数字音频信号数据。
所述步骤A2包括:
A21、根据当前所述第一指针的值,获得当前需要写入所述第一输出缓冲单元中的所述一帧第二声道的前半部分数字音频信号数据的数据量;
A22、根据所述数据量将所述一帧第二声道的前半部分数字音频信号数据写入所述第一输出缓冲单元的后半个区间,并重复步骤A21,直到所述一帧第二声道的前半部分数字音频信号数据全部写入所述第一输出缓冲单元的后半个区间。
所述步骤A5包括:
A51、根据当前所述第一指针的值,获得当前需要写入所述第二输出缓冲单元中的所述下一帧第二声道的数字音频信号数据的数据量;
A52、根据所述数据量将所述下一帧第二声道的数字音频信号数据写入所述第二输出缓冲单元中,并重复步骤A51,直到所述第一指针指向所述第二输出缓冲单元的中间位置。
本发明系统,包括中央处理单元、输出缓冲单元和直接内存访问单元,
所述中央处理单元,用于将数字音频信号数据写入所述输出缓冲单元;
所述直接内存访问单元,用于从所述输出缓冲单元中交错读取同一帧的第一声道和第二声道的数字音频信号数据,将该数字音频信号数据输出。
所述中央处理单元包括:
第一处理单元,用于将第一帧数字音频信号数据写入所述输出缓冲单元;
第二处理单元,用于从第二帧数字音频信号数据开始,根据所述输出缓冲单元中的数据被读取的数据量,将每帧数字音频信号数据写入所述输出缓冲单元。
所述输出缓冲单元包括:第一输出缓冲单元和第二输出缓冲单元;
则,所述第一处理单元包括:
第一帧第一声道数据写入单元,用于将所述第一帧第一声道的数字音频信号数据写入所述第一输出缓冲单元;
第一帧第二声道数据写入单元,用于将所述第一帧第二声道的数字音频信号数据写入所述第二输出缓冲单元;
所述第一输出缓冲单元和第二输出缓冲单元中的每一输出缓冲单元只能缓冲一帧数字音频信号中的一个声道的数据量。
所述第二处理单元包括:
第一单元,用于当所述第一输出缓冲单元和第二输出缓冲单元的前半个区间的数据已全部被读取时,将一帧第一声道的前半部分和后半部分数字音频信号数据分别写入所述第一输出缓冲单元和第二输出缓冲单元的前半个区间;
第二单元,用于根据所述第一输出缓冲单元的后半个区间中的数据已被读取的数据量,将所述一帧第二声道的前半部分数字音频信号数据写入所述第一输出缓冲单元的后半个区间;
第三单元,用于当所述第二输出缓冲单元的后半个区间中的数据已全部被读取时,将所述第二声道的后半部分数字音频信号数据写入所述第二输出缓冲单元的后半个区间;
第四单元,用于当所述第一输出缓冲单元中的数据全部被读取时,将下一帧第一声道的数字音频信号数据写入所述第一输出缓冲单元中;
第五单元,用于根据所述第二输出缓冲单元中的数据已被读取的数据量,将所述下一帧第二声道的数字音频信号数据写入所述第二输出缓冲单元中。
在所述直接内存访问单元中预先设置两个指针,用于指向所述输出缓冲单元中读取数据的位置,所述指针的值为所述读取数据的地址;
则,所述直接内存访问单元包括:
第一指针单元,用于通过第一指针,读取一帧第一声道的一个数字音频信号样本数据,并触发第二指针单元;
第二指针单元,用于通过第二指针,读取所述一帧第二声道的一个数字音频信号样本数据,并触发第一指针单元。
所述第二单元包括:
第一获得数据量单元,用于根据当前所述第一指针的值,获得当前需要写入所述第一输出缓冲单元中的所述一帧第二声道的前半部分数字音频信号数据的数据量;
第一写入数据单元,用于根据所述数据量将所述一帧第二声道的前半部分数字音频信号数据写入所述第一输出缓冲单元的后半个区间,并触发所述第一获得数据量单元,直到所述一帧第二声道的前半部分数字音频信号数据全部写入所述第一输出缓冲单元的后半个区间。
所述第五单元包括:
第二获得数据量单元,用于根据当前所述第一指针的值,获得当前需要写入所述第二输出缓冲单元中的所述下一帧第二声道的数字音频信号数据的数据量;
第二写入数据单元,用于根据所述数据量将所述下一帧第二声道的数字音频信号数据写入所述第二输出缓冲单元中,并触发所述第二获得数据量单元,直到所述第一指针指向所述第二输出缓冲单元的中间位置。
本发明通过将数字音频信号数据写入输出缓冲单元,从所述输出缓冲单元中交错读取同一帧的第一声道和第二声道的数字音频信号数据,将该数字音频信号数据输出的技术方案,解决了现有技术实现音频输出过程中,占用输出缓冲单元过大以及系统成本较高的问题,使得在音频输出过程中所占用的输出缓冲单元,比现有技术音频输出过程中所占用的输出缓冲单元减小了一半,降低了音频解码系统的成本。
附图说明
图1为本发明方法的流程示意图;
图2为本发明方法具体实施例的流程示意图;
图3为本发明方法具体实施例中输出缓冲单元0和输出缓冲单元1存储初始帧的PCM数据的示意图;
图4为本发明方法具体实施例中输出缓冲单元0和输出缓冲单元1存储每个循环周期中的第一帧的PCM数据的示意图;
图5为本发明方法具体实施例中输出缓冲单元0和输出缓冲单元1存储每个循环周期中的第二帧的PCM数据的示意图;
图6为本发明系统的结构示意图。
具体实施方式
本发明的核心思想为:CPU将数字音频信号数据写入输出缓冲单元,DMA从所述输出缓冲单元中交错读取同一帧的第一声道和第二声道的数字音频信号数据,将该数字音频信号数据输出,使得在音频输出过程中所占用的输出缓冲单元,比现有技术音频输出过程中所占用的输出缓冲单元减小了一半,从而降低了音频解码系统的成本。
参见图1,本发明方法包括步骤:
S101、CPU/DSP将数字音频信号数据写入输出缓冲单元;
CPU/DSP将第一帧数字音频信号数据写入输出缓冲单元,从第二帧数字音频信号数据开始,根据所述输出缓冲单元中的数据被读取的数据量,将每帧数字音频信号数据写入输出缓冲单元;
其中,所述输出缓冲单元包括第一输出缓冲单元和第二输出缓冲单元;
所述CPU将所述第一帧第一声道的PCM数据写入第一输出缓冲单元,将所述第一帧第二声道的PCM数据写入第二输出缓冲单元;
所述第一输出缓冲单元和第二输出缓冲单元中的每一输出缓冲单元只能缓冲一帧数字音频信号中的一个声道的数据量;
从第二帧数字音频信号数据开始,CPU将每帧数字音频信号数据写入输出缓冲单元的步骤包括:
步骤一:当所述第一输出缓冲单元和第二输出缓冲单元的前半个区间的数据已全部被读取时,将一帧第一声道的前半部分和后半部分数字音频信号数据分别写入所述第一输出缓冲单元和第二输出缓冲单元的前半个区间;
步骤二:根据所述第一输出缓冲单元的后半个区间中的数据已被读取的数据量,将所述一帧第二声道的前半部分数字音频信号数据写入所述第一输出缓冲单元的后半个区间;
步骤三:当所述第二输出缓冲单元的后半个区间中的数据已全部被读取时,将所述第二声道的后半部分数字音频信号数据写入所述第二输出缓冲单元的后半个区间;
步骤四:当所述第一输出缓冲单元中的数据全部被读取时,将下一帧第一声道的数字音频信号数据写入所述第一输出缓冲单元中;
步骤五:根据所述第二输出缓冲单元中的数据已被读取的数据量,将所述下一帧第二声道的数字音频信号数据写入所述第二输出缓冲单元中;
S102、DMA从所述输出缓冲单元中交错读取同一帧的第一声道和第二声道的数字音频信号数据,将该数字音频信号数据输出;
较佳地,预先为DMA设置两个指针,用于指向所述输出缓冲单元中读取数据的位置,所述指针的值为所述读取数据的地址;
DMA通过预先设置的第一指针从所述输出缓冲单元中读取同一帧第一声道的数字音频信号数据,通过预先设置的第二指针从所述输出缓冲单元中读取所述同一帧第二声道的数字音频信号数据,其中,所述第一指针和所述第二指针交替读取数字音频信号数据;
则,所述步骤二包括步骤:
a、CPU根据当前所述第一指针的值,获得当前需要写入所述第一输出缓冲单元中的所述一帧第二声道的前半部分数字音频信号数据的数据量;
b、CPU根据所述数据量将所述一帧第二声道的前半部分数字音频信号数据写入所述第一输出缓冲单元的后半个区间,并重复步骤a,直到所述一帧第二声道的前半部分数字音频信号数据全部写入所述第一输出缓冲单元的后半个区间;
所述步骤五包括:
a’、CPU根据当前所述第一指针的值,获得当前需要写入所述第二输出缓冲单元中的所述下一帧第二声道的数字音频信号数据的数据量;
b’、CPU根据所述数据量将所述下一帧第二声道的数字音频信号数据写入所述第二输出缓冲单元中,并重复步骤a’,直到当所述第一指针的值为所述第一输出缓冲单元的首地址时,将所述下一帧第二声道的数字音频信号数据全部写入所述第二输出缓冲单元中。
参见图2,为本发明方法具体实施方式的流程示意图,该方法应用于对WMA音频压缩码流数据的音频解码系统中,本发明方法预先在DMA中设置了两个指针P0和P1的初始值分别为输出缓冲单元0和输出缓冲单元1的首地址,并且设置输出缓冲单元0和输出缓冲单元1的长度都为L;所述指针P0和P1为DMA在任何一特定时刻都操纵的两个指针,用于从缓冲单元取值并交错,即P0取一个PCM样本且P0加1,然后P1取一个PCM样本且P1加1,P0和P1交错取值,在这里,可以设定输出缓冲单元0和输出缓冲单元1的首地址分别为B0和B1,L为单声道一帧PCM样本的长度;
参见图3,CPU将初始帧的第一声道和第二声道的PCM数据分别写入输出缓冲单元0和输出缓冲单元1中,这里所述PCM数据就是音频压缩码流数据经过CPU处理后的解压缩音频样本数据;
那么,从初始帧的下一帧的PCM数据开始,每两帧PCM数据作为一个周期,那么该方法在处理每个周期中的第一帧PCM数据和第二帧PCM数据时,包括步骤:
S201、DMA将输出缓冲单元0中第一声道和输出缓冲单元1中第二声道的PCM数据进行交错,并将交错后的PCM数据发送给Audio DAC;
所述DMA将输出缓冲单元0中第一声道和输出缓冲单元1中第二声道的PCM数据进行交错是指每个时钟交替发送第一声道和中第二声道的一个PCM样本数据给所述Audio DAC;
S202、CPU对第一帧音频压缩码流数据进行解码;
S203、当P0和P1的值分别大于所述输出缓冲单元0和输出缓冲单元1的中间地址时,CPU将第一帧第一声道的前半部分PCM数据和后半部分PCM数据分别写入输出缓冲单元0和输出缓冲单元1的首地址到中间地址的范围内;
当CPU完成第一帧第一声道的解码后,检查P0和P1,如果他们的值都大于所述输出缓冲单元0和输出缓冲单元1的中间地址,即P0和P1满足:
P0>B0+L/2 & & P1>B1+L/2
则CPU将第一帧第一声道的前半部分PCM数据和后半部分PCM数据分别写入输出缓冲单元0和输出缓冲单元1的首地址到中间地址的范围内,参见图4,所述第一帧第一声道的前半部分PCM数据和后半部分PCM数据分别存储在输出缓冲单元0和输出缓冲单元1的首地址到中间地址的范围内;
S204、CPU根据当前指针P0的值,将所述第一帧第二声道的前半部分PCM数据写入所述输出缓冲单元0的中间地址到末地址的范围内;
CPU完成对第一帧第二声道的解码后,将其前P0-(B0+L/2)个样本输出缓冲单元0的中间地址开始写入输出缓冲单元0中,所述输出缓冲单元0的中间地址为B0+L/2,然后,CPU再检查当前P0的值,设当前P0的值比上次所检查的P0的值增加的值为N,说明DMA又从输出缓冲单元0中取出N个样本值,因此,CPU可以再将N个第一帧第二声道的PCM样本数据写入输出缓冲单元0中,直到所述第一帧第二声道的前半部分PCM数据全部写入所述输出缓冲单元0的中间地址到末地址的范围内,参见图4,所述第一帧第二声道的前半部分PCM数据存储在所述输出缓冲单元0的中间地址到末地址的范围内;
S205、DMA将所述输出缓冲单元0的首地址赋值给所述P0,将所述输出缓冲单元0的中间地址赋值给所述P1,并将所述输出缓冲单元0中第一帧第一声道和第二声道的前半部分PCM数据交错后发送给Audio DAC;
当所述P0和P1的值分别为输出缓冲单元0和输出缓冲单元1的末地址时,DMA将P0赋值为B0,将P1赋值为B0+L/2,DMA将所述输出缓冲单元0中第一帧第一声道和第二声道的前半部分PCM数据交错后发送给Audio DAC;
此时,CPU检查当前P0的值比上次所检查的P0的值小,则CPU将第一帧第二声道的前半部分没有写入输出缓冲单元0的PCM数据写入所述输出缓冲单元0的中间地址到末地址的范围内,如图4所示,输出缓冲单元0的中间地址到末地址的范围内存储了第一帧第二声道的前半部分PCM数据;
S206、CPU将所述第一帧第二声道的后半部分PCM数据,从所述输出缓冲单元1的中间地址开始,写入所述输出缓冲单元1的中间地址到末地址的范围内,然后对第二帧音频压缩码流数据进行解码;
在CPU将第一帧第二声道的前半部分PCM数据全部写入输出缓冲单元0的中间地址到末地址的范围内后,继续将所述第一帧第二声道的后半部分PCM数据,从所述输出缓冲单元1的中间地址开始,写入所述输出缓冲单元1的中间地址到末地址的范围内,所述输出缓冲单元1的中间地址为B1+L/2,将所述第一帧第二声道的后半部分PCM数据全部写入所述输出缓冲单元1的中间地址到末地址的范围内后,CPU开始对第二帧第一声道的音频压缩码流数据进行解码;
S207、当所述P0的值为所述输出缓冲单元0的中间地址时,DMA将所述输出缓冲单元1的首地址赋值给所述P0,将所述输出缓冲单元1的中间地址赋值给所述P1,并将所述输出缓冲单元1中第一帧第一声道和第二声道的后半部分PCM数据交错后发送给Audio DAC;
S208、CPU将第二帧第一声道的PCM数据写入输出缓冲单元0中;
当CPU完成对所述第二帧第一声道的音频压缩码流数据的解码后,将该第二帧第一声道的PCM数据全部写入输出缓冲单元0中,如图5所示,输出缓冲单元0中存储了第二帧第一声道的PCM数据;
S209、CPU根据当前指针P0的值,将所述第二帧第二声道的PCM数据写入所述输出缓冲单元1中;
S210、当所述P0的值等于所述输出缓冲单元1的中间地址时,DMA将输出缓冲单元0的首地址和输出缓冲单元1的首地址分别赋值给指针P0和P1;
CPU将第二帧第一声道的PCM数据全部写入输出缓冲单元0中后,开始对第二帧第二声道的音频压缩码流数据进行解码,完成对所述第二帧第二声道的音频压缩码流数据的解码后,将该第二帧第一声道的PCM数据的前P0-B1个样本数据从B1开始写入输出缓冲单元1中,然后,再检查当前P0的值,设当前P0的值比上次所检查的P0的值增加的值为M,说明DMA又从输出缓冲单元1中取出M个样本值,因此,CPU可以再将M个第二帧第二声道的PCM样本数据写入输出缓冲单元0中,直到所述第二帧第二声道的前半部分PCM数据全部写入所述输出缓冲单元1的首地址到中间地址的范围内,当P0的值为B1+L/2时,此时P1的值为输出缓冲单元1的末地址,返回步骤S201,即DMA将输出缓冲单元0的首地址和输出缓冲单元1的首地址分别赋值给指针P0和P1;
此时,CPU将第二帧第二声道剩下的PCM数据全部写入输出缓冲单元1中,参见图5,输出缓冲单元1中存储了第二帧第二声道的PCM数据。
综上,本发明DMA对指针P0和P1的值的更新过程如下:
P0=B0,P1=B1;
当P0==B0+L且P1=B1+L时,P0=B0,P1=B0+L/2;
当P0=B0+L/2且P1=B0+L时,P0=B1,P1=B1+L/2;
当P0=B1+L/2且P1=B1+L时,P0=B0,P1=B1;
因此,采用本发明方法实现的DMA,在进行音频解码的过程中,可以将现有技术中的输出缓冲单元减少一半,即现有技术中的输出缓冲单元为4L,而本发明的输出缓冲单元为2L。
参见图6,本发明系统包括:中央处理单元601、输出缓冲单元602、直接内存访问单元603、音频数字/模拟转换器604及扬声器605;
其中,所述中央处理单元601包括:第一处理单元6011和第二处理单元6012;
所述第一处理单元6011包括:第一帧第一声道数据写入单元60111和第一帧第二声道数据写入单元60112;
所述第二处理单元6012包括:第一单元60121、第二单元60122、第三单元60123、第四单元60124和第五单元60125;
所述第二单元60122包括:第一获得数据量单元601221和第一写入数据单元601222;
所述第五单元60125包括:第二获得数据量单元601251和第二写入数据单元601252;
所述输出缓冲单元602包括:第一输出缓冲单元6021和第二输出缓冲单元6022;
所述直接内存访问单元603包括:第一指针单元6031和第二指针单元6032;
所述中央处理单元601,将数字音频信号数据写入所述输出缓冲单元602;
所述直接内存访问单元604,从所述输出缓冲单元602中交错读取同一帧的第一声道和第二声道的数字音频信号数据,将该数字音频信号数据输出;
其中,所述第一处理单元6011,用于将第一帧数字音频信号数据写入所述输出缓冲单元602,所述第一帧第一声道数据写入单元60111,将所述第一帧第一声道的数字音频信号数据写入所述第一输出缓冲单元6021;所述第一帧第二声道数据写入单元60112,将所述第一帧第二声道的数字音频信号数据写入所述第二输出缓冲单元6022;
所述第一输出缓冲单元602和第二输出缓冲单元603的长度都为L,所述L为一帧单声道PCM样本的长度,所述第一输出缓冲单元602和第二输出缓冲单元603用于存储PCM数据,每个输出缓冲单元都可以存储L个PCM样本数据;
所述第二处理单元6012,用于从第二帧数字音频信号数据开始,根据所述输出缓冲单元602中的数据被读取的数据量,将每帧数字音频信号数据写入所述输出缓冲单元602,所述第一单元60121,当所述第一输出缓冲单元6021和第二输出缓冲单元6022的前半个区间的数据已全部被读取时,将一帧第一声道的前半部分和后半部分数字音频信号数据分别写入所述第一输出缓冲单元6021和第二输出缓冲单元6022的前半个区间;所述第二单元60122,根据所述第一输出缓冲单元6021的后半个区间中的数据已被读取的数据量,将所述一帧第二声道的前半部分数字音频信号数据写入所述第一输出缓冲单元6021的后半个区间;所述第三单元60123,当所述第二输出缓冲单元6022的后半个区间中的数据已全部被读取时,将所述第二声道的后半部分数字音频信号数据写入所述第二输出缓冲单元6022的后半个区间;所述第四单元60124,当所述第一输出缓冲单元6021中的数据全部被读取时,将下一帧第一声道的数字音频信号数据写入所述第一输出缓冲单元6021中;所述第五单元60125,根据所述第二输出缓冲单元6022中的数据已被读取的数据量,将所述下一帧第二声道的数字音频信号数据写入所述第二输出缓冲单元6022中;
较佳地,在所述直接内存访问单元603中预先设置两个指针,用于指向所述输出缓冲单元中读取数据的位置,所述指针的值为所述读取数据的地址,则所述第一指针单元6031,用于通过第一指针P0读取一帧第一声道的一个数字音频信号样本数据,并触发第二指针单元6032;所述第二指针单元6032,用于通过第二指针P1读取所述一帧第二声道的一个数字音频信号样本数据,并触发第一指针单元6031,即所述第一指针单元6031和第二指针单元6032分别通过指针P0和P1交错读取一帧第一声道和第二声道的PCM样本数据;
所述第一获得数据量单元601221,用于根据当前所述第一指针的值,获得当前需要写入所述第一输出缓冲单元6021中的所述一帧第二声道的前半部分数字音频信号数据的数据量;
所述第一写入数据单元601222,用于根据所述数据量将所述一帧第二声道的前半部分数字音频信号数据写入所述第一输出缓冲单元6021的后半个区间,并触发所述第一获得数据量单元601221,直到所述一帧第二声道的前半部分数字音频信号数据全部写入所述第一输出缓冲单元6021的后半个区间;
所述第二获得数据量单元601251,用于根据当前所述第一指针的值,获得当前需要写入所述第二输出缓冲单元6022中的所述下一帧第二声道的数字音频信号数据的数据量;
所述第二写入数据单元601252,用于根据所述数据量将所述下一帧第二声道的数字音频信号数据写入所述第二输出缓冲单元6022中,并触发所述第二获得数据量单元601251,直到当所述第一指针的值为所述第一输出缓冲单元6021的首地址时,将所述下一帧第二声道的数字音频信号数据全部写入所述第二输出缓冲单元6022中;
综上,所述指针P0和P1的初始值分别为第一输出缓冲单元6021和第二输出缓冲单元6022的首地址,这两个指针的值的更新过程为:
P0=B0,P1=B1;
当P0=B0+L且P1=B1+L时,P0=B0,P1=B0+L/2;
当P0=B0+L/2且P1=B0+L时,P0=B1,P1=B1+L/2;
当P0=B1+L/2且P1=B1+L时,P0=B0,P1=B1;
其中,所述音频数字/模拟转换器604,用于接收直接内存访问单元603发送的PCM数据,并将所述PCM数据转换成音频模拟信号,并将该音频模拟信号发送给所述扬声器605;
所述扬声器605,用于输出所述音频模拟信号给用户。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。
Claims (14)
1、一种音频输出方法,其特征在于,该方法包括步骤:
A.将数字音频信号数据写入输出缓冲单元;
B.从所述输出缓冲单元中交错读取同一帧的第一声道和第二声道的数字音频信号数据,将该数字音频信号数据输出。
2、如权利要求1所述的方法,其特征在于,所述步骤A包括:
将第一帧数字音频信号数据写入输出缓冲单元,从第二帧数字音频信号数据开始,根据所述输出缓冲单元中的数据被读取的数据量,将每帧数字音频信号数据写入输出缓冲单元。
3、如权利要求2所述的方法,其特征在于,所述输出缓冲单元包括第一输出缓冲单元和第二输出缓冲单元;
则,步骤A中所述将第一帧数字音频信号数据写入输出缓冲单元的步骤为:
将第一帧第一声道的数字音频信号数据写入第一输出缓冲单元,将所述第一帧第二声道的数字音频信号数据写入第二输出缓冲单元;
所述第一输出缓冲单元和第二输出缓冲单元中的每一输出缓冲单元只能缓冲一帧数字音频信号中的一个声道的数据量。
4、如权利要求3所述的方法,其特征在于,所述步骤A中所述从第二帧数字音频信号数据开始,根据所述输出缓冲单元中的数据被读取的数据量,将每帧数字音频信号数据写入输出缓冲单元的步骤为:
A1、当所述第一输出缓冲单元和第二输出缓冲单元的前半个区间的数据已全部被读取时,将一帧第一声道的前半部分和后半部分数字音频信号数据分别写入所述第一输出缓冲单元和第二输出缓冲单元的前半个区间;
A2、根据所述第一输出缓冲单元的后半个区间中的数据已被读取的数据量,将所述一帧第二声道的前半部分数字音频信号数据写入所述第一输出缓冲单元的后半个区间;
A3、当所述第二输出缓冲单元的后半个区间中的数据已全部被读取时,将所述第二声道的后半部分数字音频信号数据写入所述第二输出缓冲单元的后半个区间;
A4、当所述第一输出缓冲单元中的数据全部被读取时,将下一帧第一声道的数字音频信号数据写入所述第一输出缓冲单元中;
A5、根据所述第二输出缓冲单元中的数据已被读取的数据量,将所述下一帧第二声道的数字音频信号数据写入所述第二输出缓冲单元中。
5、如权利要求4所述的方法,其特征在于,预先设置两个指针,用于指向所述输出缓冲单元中读取数据的位置,所述指针的值为所述读取数据的地址;
所述步骤B中,通过预先设置的第一指针从所述输出缓冲单元中读取同一帧第一声道的数字音频信号数据,通过预先设置的第二指针从所述输出缓冲单元中读取所述同一帧第二声道的数字音频信号数据,其中,所述第一指针和所述第二指针交替读取数字音频信号数据。
6、如权利要求5所述的方法,其特征在于,所述步骤A2包括:
A21、根据当前所述第一指针的值,获得当前需要写入所述第一输出缓冲单元中的所述一帧第二声道的前半部分数字音频信号数据的数据量;
A22、根据所述数据量将所述一帧第二声道的前半部分数字音频信号数据写入所述第一输出缓冲单元的后半个区间,并重复步骤A21,直到所述一帧第二声道的前半部分数字音频信号数据全部写入所述第一输出缓冲单元的后半个区间。
7、如权利要求5所述的方法,其特征在于,所述步骤A5包括:
A51、根据当前所述第一指针的值,获得当前需要写入所述第二输出缓冲单元中的所述下一帧第二声道的数字音频信号数据的数据量;
A52、根据所述数据量将所述下一帧第二声道的数字音频信号数据写入所述第二输出缓冲单元中,并重复步骤A51,直到所述第一指针指向所述第二输出缓冲单元的中间位置。
8、一种音频输出系统,包括中央处理单元、输出缓冲单元和直接内存访问单元,其特征在于,
所述中央处理单元,用于将数字音频信号数据写入所述输出缓冲单元;
所述直接内存访问单元,用于从所述输出缓冲单元中交错读取同一帧的第一声道和第二声道的数字音频信号数据,将该数字音频信号数据输出。
9、如权利要求8所述的系统,其特征在于,所述中央处理单元包括:
第一处理单元,用于将第一帧数字音频信号数据写入所述输出缓冲单元;
第二处理单元,用于从第二帧数字音频信号数据开始,根据所述输出缓冲单元中的数据被读取的数据量,将每帧数字音频信号数据写入所述输出缓冲单元。
10、如权利要求9所述的系统,其特征在于,所述输出缓冲单元包括:第一输出缓冲单元和第二输出缓冲单元;
则,所述第一处理单元包括:
第一帧第一声道数据写入单元,用于将所述第一帧第一声道的数字音频信号数据写入所述第一输出缓冲单元;
第一帧第二声道数据写入单元,用于将所述第一帧第二声道的数字音频信号数据写入所述第二输出缓冲单元;
所述第一输出缓冲单元和第二输出缓冲单元中的每一输出缓冲单元只能缓冲一帧数字音频信号中的一个声道的数据量。
11、如权利要求10所述的系统,其特征在于,所述第二处理单元包括:
第一单元,用于当所述第一输出缓冲单元和第二输出缓冲单元的前半个区间的数据已全部被读取时,将一帧第一声道的前半部分和后半部分数字音频信号数据分别写入所述第一输出缓冲单元和第二输出缓冲单元的前半个区间;
第二单元,用于根据所述第一输出缓冲单元的后半个区间中的数据已被读取的数据量,将所述一帧第二声道的前半部分数字音频信号数据写入所述第一输出缓冲单元的后半个区间;
第三单元,用于当所述第二输出缓冲单元的后半个区间中的数据已全部被读取时,将所述第二声道的后半部分数字音频信号数据写入所述第二输出缓冲单元的后半个区间;
第四单元,用于当所述第一输出缓冲单元中的数据全部被读取时,将下一帧第一声道的数字音频信号数据写入所述第一输出缓冲单元中;
第五单元,用于根据所述第二输出缓冲单元中的数据已被读取的数据量,将所述下一帧第二声道的数字音频信号数据写入所述第二输出缓冲单元中。
12、如权利要求11所述的系统,其特征在于,在所述直接内存访问单元中预先设置两个指针,用于指向所述输出缓冲单元中读取数据的位置,所述指针的值为所述读取数据的地址;
则,所述直接内存访问单元包括:
第一指针单元,用于通过第一指针,读取一帧第一声道的一个数字音频信号样本数据,并触发第二指针单元;
第二指针单元,用于通过第二指针,读取所述一帧第二声道的一个数字音频信号样本数据,并触发第一指针单元。
13、如权利要求12所述的系统,其特征在于,所述第二单元包括:
第一获得数据量单元,用于根据当前所述第一指针的值,获得当前需要写入所述第一输出缓冲单元中的所述一帧第二声道的前半部分数字音频信号数据的数据量;
第一写入数据单元,用于根据所述数据量将所述一帧第二声道的前半部分数字音频信号数据写入所述第一输出缓冲单元的后半个区间,并触发所述第一获得数据量单元,直到所述一帧第二声道的前半部分数字音频信号数据全部写入所述第一输出缓冲单元的后半个区间。
14、如权利要求13所述的系统,其特征在于,所述第五单元包括:
第二获得数据量单元,用于根据当前所述第一指针的值,获得当前需要写入所述第二输出缓冲单元中的所述下一帧第二声道的数字音频信号数据的数据量;
第二写入数据单元,用于根据所述数据量将所述下一帧第二声道的数字音频信号数据写入所述第二输出缓冲单元中,并触发所述第二获得数据量单元,直到所述第一指针指向所述第二输出缓冲单元的中间位置。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB2007100634308A CN100507826C (zh) | 2007-01-31 | 2007-01-31 | 一种音频输出方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB2007100634308A CN100507826C (zh) | 2007-01-31 | 2007-01-31 | 一种音频输出方法及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101030132A CN101030132A (zh) | 2007-09-05 |
CN100507826C true CN100507826C (zh) | 2009-07-01 |
Family
ID=38715507
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB2007100634308A Expired - Fee Related CN100507826C (zh) | 2007-01-31 | 2007-01-31 | 一种音频输出方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN100507826C (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102376308A (zh) * | 2010-08-20 | 2012-03-14 | 环达电脑(上海)有限公司 | 处理pcm数字信号的装置及方法 |
CN111328257B (zh) * | 2020-03-11 | 2022-03-22 | 广东省电信规划设计院有限公司 | 一种上下位机的数据同步方法及装置 |
CN112804618B (zh) * | 2021-01-06 | 2022-07-29 | 昆腾微电子股份有限公司 | 一种音频输出方法及装置 |
CN115103286A (zh) * | 2022-04-29 | 2022-09-23 | 北京瑞森新谱科技股份有限公司 | 一种asio低延时声学检测方法 |
-
2007
- 2007-01-31 CN CNB2007100634308A patent/CN100507826C/zh not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
CN101030132A (zh) | 2007-09-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101247183B (zh) | 基于超声波实现通讯的发送装置、接收装置、系统和方法 | |
CN100507826C (zh) | 一种音频输出方法及系统 | |
EP1895512A3 (en) | Multi-channel encoder | |
CN107527614B (zh) | 语音控制系统及其方法 | |
CN107371092A (zh) | 一种麦克风阵列信号处理系统及方法 | |
CN102243615B (zh) | 一种支持音视频帧存储的内存缓冲管理方法 | |
CN103369365A (zh) | 音视频同步记录装置 | |
CN104615403A (zh) | 一种音频输出装置 | |
CN100458683C (zh) | 一种音频输出方法及系统 | |
CN101478315A (zh) | 一种基于cmmb标准的字节交织器及交织方法 | |
CN105047200A (zh) | 一种基于fpga的flac硬件解码器及解码方法 | |
TWI265732B (en) | Digital video storage system and related method of storing digital video data | |
CN101741391A (zh) | 在定点dsp进行mp3音频解码时优化内存空间的方法 | |
JPH11168388A (ja) | 音声制御装置と音声制御方法とナビゲーションシステム | |
CN101286344A (zh) | 一种留言系统 | |
CN201707924U (zh) | 无损音频播放器 | |
CN208445563U (zh) | 一种高速水声语音通信系统 | |
CN113327345A (zh) | 一种铁路机车通信设备记录装置及其数据存储方法 | |
CN101930744B (zh) | 一种aac音频编码的握手协议方法 | |
CN202785132U (zh) | 具有解码器的电梯语音系统 | |
CN101179278B (zh) | 音响系统及其声音讯号编码的方法 | |
CN103347114A (zh) | 一种基于蓝牙的dtmf解码方法和系统 | |
CN101556815B (zh) | 播放装置 | |
CN203070758U (zh) | 音频录放装置 | |
CN204857133U (zh) | 一种基于单片机的导游机 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
C17 | Cessation of patent right | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20090701 Termination date: 20120131 |