音频文件存储方法和系统及音频文件快进快退方法和系统
技术领域
本发明涉及音频文件播放技术领域,特别是涉及一种音频文件存储方法和系统及实现快进快退方法和系统。
背景技术
FLAC,全称为Free Lossless Audio Code音频文件,是目前被广泛使用的一种无损音频压缩编码格式。即,音频文件以FLAC编码压缩后不会丢失任何信息。将FLAC音频文件还原为WAV文件后,与压缩前的WAV文件内容相同。并且,FLAC音频文件还具有较好的容错性,每帧数据之间无关联,当FLAC文件在传播过程中受损,导致某一帧或几帧数据损坏缺失的话,只会损失被损坏的一帧或几帧的数据,其他帧的数据不会受到影响。
其中,FLAC音频文件每帧数据都有同步头,同步头中包含采样率、位宽、块长度和声道特征等信息,且每帧数据的长度也是不固定的,解码出来的点数即块长度可支持多种。因此,FLAC音频文件是可变码率的,在回放过程中不能通过时间准确推算出对应音频文件数据的长度。同时,传统的对音频文件解码后存储时,通常是首先对音频文件进行全部解码,然后将解码后得到的所有帧的起始地址及相应的点数进行存储。由此,这就使得存储音频文件解码后的数据时需要大量的空间,从而增加存储成本。
发明内容
基于此,有必要针对传统的音频文件解码后存储数据的方式需要大量的存储空间导致存储成本增加的问题,提供一种音频文件存储方法和系统及音频文件快进快退方法和系统。
为实现本发明目的提供的一种音频文件存储方法,包括如下步骤:
设置具有M个存储单元的存储空间,并对每个所述存储单元设置相应的单元索引值;其中,M的取值为2n,且n的取值为大于或等于3的正整数;
当音频文件处于正常播放模式或快进模式时,解析所述音频文件,并将解析得到的每一帧的起始位置及对应的总点数顺序保存至所述存储空间中的所述存储单元中;其中,所述总点数为所述每一帧的起始位置前面所有帧解码后对应的总点数;
当所述存储空间存满时,删除所述单元索引值为奇数的存储单元中存储的起始位置及对应的总点数,并将剩余的起始位置及对应的总点数依次复制到前M/2的存储空间中;
其中,当所述存储空间第i次存满时,所述单元索引值为p的所述存储单元中存储的数据为第p*(2^i)帧的起始位置及对应的总点数;且p=0……M-1。
相应的,本发明还提供了一种音频文件存储系统,包括存储设置模块,解析存储模块和删除复制模块;
所述存储设置模块,被配置为设置具有M个存储单元的存储空间,并对每个所述存储单元设置相应的单元索引值;其中,M的取值为2n,且n的取值为大于或等于3的正整数;
所述解析存储模块,被配置为当音频文件处于正常播放模式或快进模式时,解析所述音频文件,并将解析得到的每一帧的起始位置及对应的总点数顺序保存至所述存储空间中的所述存储单元中;其中,所述总点数为所述每一帧的起始位置前面所有帧解码后对应的总点数;
所述删除复制模块,被配置为当所述存储空间存满时,删除所述单元索引值为奇数的存储单元中存储的起始位置及对应的总点数,并将剩余的起始位置及对应的总点数依次复制到前M/2的存储空间中;
其中,当所述存储空间第i次存满时,所述单元索引值为p的所述存储单元中存储的数据为第p*(2^i)帧的起始位置及对应的总点数;且p=0……M-1。
相应的,本发明还提供了一种音频文件快进快退方法,包括前面所述的音频文件存储方法,还包括如下步骤:
判断接收到的信号类型;
若接收到的所述信号类型为快进信号,则根据接收到的所述快进信号,获取相应的第一目标点数;
解析所述音频文件的当前帧,获取所述当前帧的起始位置对应的当前总点数及所述当前帧的当前数据点数;
根据所述第一目标点数、所述当前总点数和所述当前数据点数,判断是否需要对所述当前帧进行解码;若是,则对所述当前帧进行解码,并输出解码后的数据流;若否,则按照所述音频文件存储方法保存所述当前帧的起始位置及对应的所述当前总点数,并进行下一帧的解析;
若接收到的所述信号类型为快退信号,则根据接收到的所述快退信号,获取相应的第二目标点数;
搜索所述存储空间中存储的所有数据,由所述存储空间中查找到最接近所述第二目标点数的总点数作为最接近总点数,并根据所述最接近总点数对应的单元索引值获取最接近所述第二目标点数的起始位置作为最接近起始位置;
跳转到所述音频文件的所述最接近起始位置,并解析所述最接近起始位置对应的帧文件,按照所述音频文件接收到所述快进信号时的方法,对所述帧文件进行解码输出或进行所述帧文件的下一帧文件的解析。
在其中一个实施例中,所述根据接收到的所述快进信号,获取相应的第一目标点数,包括如下步骤:
根据接收到的所述快进信号,获取需要快进的时间;
根据所述音频文件的采样率和所述需要快进的时间,计算得到需要快进的点数;
根据计算得到的所述需要快进的点数,并结合当前位于所述音频文件位置处对应的所述当前数据点数,计算得到所述目标点数。
在其中一个实施例中,所述根据所述第一目标点数、获取的所述当前总点数和所述当前数据点数,判断是否需要对所述当前帧进行解码,包括如下步骤:
判断所述第一目标点数是否大于或等于所述当前总点数,且小于所述当前总点数与所述当前数据点数之和;
若是,则判断出需要对所述当前帧进行解码输出;若否,则判断出不需要对所述当前帧进行解码输出。
在其中一个实施例中,在所述音频文件存储方法中,将解析得到的每一帧的起始位置及对应的总点数顺序保存至所述存储空间中的所述存储单元中时,还包括对保存的所述每一帧设置相应的帧索引值的步骤;其中,所述帧索引值的取值为自然数;且
接收到所述快退信号,所述音频文件处于快退模式时,所述搜索所述存储空间中存储的所有数据,由所述存储空间中查找到最接近所述第二目标点数的总点数作为最接近总点数,并根据所述最接近总点数对应的单元索引值获取最接近所述第二目标点数的起始位置作为最接近起始位置,包括如下步骤:
搜索所述存储空间中存储的所有数据,比较所述存储空间中存储的所有总点数与所述第二目标点数的大小,确定小于等于所述第二目标点数中最大的总点数作为所述最接近总点数;
根据所述最接近总点数对应的单元索引值,按照公式:
最接近所述第二目标点数的帧文件的帧索引值=所述最接近总点数对应的单元索引值*2i,计算得到最接近所述第二目标点数的帧文件的帧索引值;
根据所述帧索引值,确定所述帧索引值对应的帧文件的起始位置作为所述最接近起始位置。
相应的,本发明还提供了一种音频文件快进快退系统,包括前面所述的音频文件存储系统,还包括信号类型判断模块、目标点数获取模块、解析文件模块、判断控制模块和搜索查找模块;
所述信号类型判断模块,被配置为判断接收到的信号类型;
所述目标点数获取模块,被配置为所述信号类型判断模块判断出所述信号类型为快进信号时,根据接收到的所述快进信号,获取相应的第一目标点数;
所述解析文件模块,被配置为当接收到所述快进信号,所述音频文件处于快进模式时,解析所述音频文件的当前帧,获取所述当前帧的起始位置对应的当前总点数及所述当前帧的当前数据点数;
所述判断控制模块,被配置为根据所述第一目标点数、所述当前总点数和所述当前数据点数,判断是否需要对所述当前帧进行解码;若是,则对所述当前帧进行解码,并输出解码后的数据流;若否,则跳转至所述音频文件存储系统进行所述当前帧的起始位置及对应的所述当前总点数的存储操作,并进行下一帧的解析;
所述目标点数获取模块,还被配置为所述信号类型判断模块判断出所述信号类型为快退信号时,根据接收到的所述快退信号,获取相应的第二目标点数;
所述搜索查询模块,被配置为当接收到所述快退信号,所述音频文件处于快退模式时,搜索所述存储空间中存储的所有数据,由所述存储空间中查找到最接近所述第二目标点数的总点数作为最接近总点数,并根据所述最接近总点数对应的单元索引值获取最接近所述第二目标点数的起始位置作为最接近起始位置;
所述解析文件模块,还被配置为跳转到所述音频文件的所述最接近起始位置,并解析所述最接近起始位置对应的帧文件;
所述判断控制模块,还被配置为按照所述音频文件处于所述快进模式时的方法,对所述帧文件进行解码输出或进行所述帧文件的下一帧文件的解析。
在其中一个实施例中,所述目标点数获取模块包括时间获取单元、点数计算单元和目标点数计算单元;
所述时间获取单元,被配置为根据接收到的所述快进信号,获取需要快进的时间;
所述点数计算单元,被配置为根据所述音频文件的采样率和所述需要快进的时间,计算得到需要快进的点数;
所述目标点数计算单元,被配置为根据计算得到的所述需要快进的点数,并结合当前位于所述音频文件位置处对应的所述当前数据点数,计算得到所述目标点数。
在其中一个实施例中,所述判断控制模块包括第一判断单元和第一控制单元;
所述第一判断单元,被配置为判断所述第一目标点数是否大于或等于所述当前总点数,且小于所述当前总点数与所述当前数据点数之和;
所述第一控制单元,被配置为所述第一判断单元判断出所述第一目标点数大于或等于所述当前总点数,且小于所述当前总点数与所述当前数据点数之和时,对所述当前帧进行解码输出;
所述第一控制单元,被配置为所述第一判断单元判断出,所述第一目标点数小于所述当前总点数,或大于等于所述当前总点数与所述当前数据点数之和时,直接跳转至所述音频文件存储系统和所述解析文件模块。
在其中一个实施例中,所述音频文件存储系统还包括帧索引值设置模块;
所述帧索引值设置模块,被配置为所述音频文件存储系统中的解析存储模块将解析得到的每一帧的起始位置及对应的总点数顺序保存至所述存储空间中的所述存储单元中时,对保存的所述每一帧设置相应的帧索引值;其中,所述帧索引值的取值为自然数;且
所述搜索查询模块包括比较确定单元、帧索引值计算单元和最接近起始位置确定单元;
所述比较确定单元,被配置为搜索所述存储空间中存储的所有数据,比较所述存储空间中存储的所有总点数与所述第二目标点数的大小,确定小于等于所述第二目标点数中最大的总点数作为所述最接近总点数;
所述帧索引值计算单元,被配置为根据所述最接近总点数对应的单元索引值,按照公式:
最接近所述第二目标点数的帧文件的帧索引值=所述最接近总点数对应的单元索引值*2i,计算得到最接近所述第二目标点数的帧文件的帧索引值;
所述最接近起始位置确定单元,被配置为根据所述帧索引值,确定所述帧索引值对应的帧文件的起始位置作为所述最接近起始位置。
上述音频文件存储方法的有益效果:
其通过设置具有M个存储单元的存储空间,并对每个存储单元设置相应的单元索引值,从而当音频文件处于正常播放模式或快进模块时,对音频文件进行解析,将解析得到的每一帧的起始位置及对应的总点数顺序存储至每个存储单元中。并当存储空间中的每个存储单元均存储相应的数据后,再通过删除单元索引值为奇数的存储单元中存储的起始位置及对应的总点数,同时将剩余的起始位置及对应的总点数复制到前M/2的存储空间中,实现对解码后的数据的压缩。由此,当继续对音频文件进行解析时,可将后续解析获取的数据依次存储至后M/2的存储空间中,不需要额外增加存储空间。因此也就有效降低了存储空间的成本。最终有效的解决了传统的音频文件解码后存储数据的方式需要大量的存储空间导致存储成本增加的问题。
附图说明
图1为本发明的音频文件的数据结构示意图;
图2为本发明的音频文件存储方法的一具体实施例的流程图;
图3为采用本发明的音频文件存储方法的一具体实施例进行音频文件解码存储时的存储空间示意图;
图4为本发明的音频文件存储系统的一具体实施例的结构示意图。
具体实施方式
为使本发明技术方案更加清楚,以下结合附图及具体实施例对本发明作进一步详细说明。
首先,应当说明的是,本发明音频文件存储方法中的音频文件可为FLAC文件。其中,FLAC文件全称为Free Lossless Audio Code音频文件,是目前被广泛使用的一种无损音频压缩编码格式。参见图1,FLAC音频文件每帧数据都有同步头,同步头中包含采样率、位宽、块长度和声道特征等信息,且每帧数据的长度也是不固定的,解码出来的点数即块长度可支持多种。因此,FLAC音频文件是可变码率的。也就是说,本发明的音频文件存储方法中的音频文件可为可变码率的音频文件。另外,本发明的音频文件存储方法中的音频文件也可为固定码率的音频文件。
进一步的,对音频文件进行解析时所获取的每一帧的起始位置指的是音频文件中每一帧的同步头位置。其对应的总点数,则指的是每一帧的起始位置前面所有帧解码后得到的总点数。即,对当前帧的起始位置前面的每一帧的块长度进行求和后所得到的块长度之和即为当前帧的起始位置对应的总点数。其中,每一帧的块长度即为每一帧的起始位置对应的点数。并且,每一帧的块长度可通过读取每一帧中的“帧信息”得到。
参见图2,作为本发明的音频文件存储方法的一具体实施例,其首先包括步骤S100,设置具有M个存储单元的存储空间,并对每个存储单元设置相应的单元索引值。其中,应当说明的是,M的取值为2n,且n的取值为大于或等于3的正整数。并且,针对每个存储单元设置的单元索引值的取值为自然数0、1、2、3……。且,所设置的单元索引值可采用midx表示。即,对应每个存储单元依次设置单元索引值midx=0、1、2、3……p,以实现对每个存储单元的标记。
并且,参见图3,作为本发明的音频文件存储方法的一具体实施例,其所设置的每个存储单元均可包括2个无符号整型数据。其中一个无符号整型数据a0、a1、a2、a3……表征音频文件的每一帧的起始位置fileptr。另一个无符号整型数据b0、b1、b2、b3……则对应表征每一帧的起始位置对应的总点数grpoint。其中,a0、a1、a2、a3……与b0、b1、b2、b3……一一对应。并且,此处公开的总点数grpoint为每一帧的起始位置前面所有帧解码之后对应的总点数。
当通过步骤S100,对存储空间设置好M个存储单元后,即可执行步骤S200,当音频文件处于正常播放模式或快进模式时,解析音频文件,并将解析后得到的每一帧的起始位置及对应的总点数顺序保存至存储空间中的每个存储单元中。即,当音频文件处于正常播放模式(即按照正常速度进行播放)或快进模式时,此时对音频文件进行解析,获取相应的音频文件中每一帧的起始位置及对应的总点数,进而再将获取的每一帧的起始位置及对应的总点数顺序存储至每个存储单元中。此处,需要说明的是,对音频文件进行解析,获取每一帧的起始位置可通过消耗的位流计算得到。同时,获取对应的总点数时,可通过读取音频文件中的本帧的“帧信息”获取本帧的块长度,进而再对上一帧的总点数与本帧的块长度进行求和运算来得到。
此处,需要说明的是,在顺序保存解析得到的音频文件的每一帧的起始位置及其对应的总点数至存储单元中时,为了便于后续对音频文件进行快进或快退操作时,能够快速查找到相应的帧文件,其还包括对保存的每一帧文件设置相应的帧索引值的步骤。其中,所设置的帧索引值的取值为自然数0、1、2、3……。并且,可采用fidx来表示。即,fidx=0、1、2、3……。
并且,在顺序存储解析得到的每一帧起始位置及其对应的总点数至每个存储单元过程中,由于存储空间所设置的存储单元的个数为固定的,当存储空间存满时,为了避免额外增加存储空间从而增加存储成本的情况,作为本发明的音频文件存储方法的一具体实施例,其可通过步骤S300,删除单元索引值midx为奇数的存储单元中存储的起始位置及对应的总点数,并将剩余的起始位置及对应的总点数复制到前M/2的存储空间中,从而使得后续解析音频文件获取的数据能够继续顺次存储至后M/2的存储空间中。
其通过在存储空间存满时,删除单元索引值为奇数的存储单元中存储的数据,并将剩余的数据复制到前M/2的存储空间中,保证了后续解析获取的数据的继续存储,同时还不需要另外增加存储空间,这也就在保证数据的完整性的同时,还有效的降低了存储成本。
其中,应当说明的是,当存储空间存满时,为了保证每一个存储单元中的步长相同,其进行存储单元中存储的数据删除操作时,其必须删除单元索引值为奇数的存储单元中存储的数据。
并且,在本发明的音频文件存储方法中,当存储空间第i次存满时,单元索引值为p的存储单元中存储的数据为第p*(2^i)帧的起始位置及对应的总点数。其中,应当说明的是,p=0……M-1。
为了更清楚的说明本发明的音频文件存储方法的技术方案,以下以n的取值为7,相应的,M的取值为128为例,对本发明的音频文件存储方法做更进一步的说明。
首先,设置一个具有128个存储单元的内存空间。并且,每个存储单元对应的单元索引值分别为midx=0,1,2,3,……,127。同时,每个存储单元均包括2个无符号整型数据。
当音频文件进行正常解码或快进时,解析音频文件获取每一帧的起始位置fileptr及对应的总点数grpoint,并对每一帧顺序设置相应的帧索引值fidx=0,1,2,3,……,127。其中,每一帧对应音频文件中的起始位置fileptr(即图1中的“同步头”的位置)可以通过消耗的位流计算得到。该位置前面所有帧解码之后对应的总点数grpoint可通过上一帧的总点数加上由本帧的“帧信息”中读取的块长度block_size相加求和得到。需要说明的是,当音频文件处于快进模式下时,对音频文件进行解析时,只需要解析音频文件的“同步头”和“帧信息”,无需进行后续的常规解码。
其中,当帧索引值fidx=128时,表明内存空间第1次存满。此时,删除midx为奇数索引的数据,将偶数索引的数据复制到前M/2的内存空间,可知依次存放的fileptr及grpoint对应的帧索引值fidx=0,2,4,6,……,126。其中,单元索引值midx=64处,存入的数据是:帧索引值fidx=128的帧文件的起始位置fileptr及对应的总点数grpoint。接下来,每2帧存入一次fileptr及grpoint值。
当帧索引值fidx=256时,表明内存空间第2次存满。此时,则继续删除midx为奇数索引的数据,将偶数索引的数据复制到前M/2的内存空间,可知依次存放的fileptr及grpoint对应的帧索引值fidx=0,4,8,12,……,252。其中,单元索引值midx=64处,存入的数据是:帧索引值fidx=256的帧文件的起始位置fileptr及对应的总点数grpoint。接下来,每4帧存入一次fileptr及grpoint值。
当帧索引值fidx=512时,表明内存空间第3次存满。此时,继续删除midx为奇数索引的数据,将偶数索引的数据复制到前M/2的内存空间,可知依次存放的fileptr及grpoint对应的帧索引值fidx=0,8,16,24,……,504。其中,单元索引值midx=64处,存入的数据则是:帧索引值fidx=512的帧文件的起始位置fileptr及对应的总点数grpoint。接下来,每8帧存入一次fileptr及grpoint值。
以此类推,如图3所示,内存空间第i次存满时,通过隔一取一的方法,将存储所需空间减半,实现了音频文件的存储。其中,内存空间第i次存满时,midx处存放的fileptr及grpoint对应的帧索引值为fidx=midx*2^i,内存空间中所存数据是以BLOCK=2^i帧为分组首帧位置及总点数信息。
即,当内存空间第i次存满时,内存空间中,单元索引值为0(midx=0)的存储单元中存储的数据保持为:帧索引值为0的帧文件的起始位置及对应的总点数信息,即a0和b0的数据。单元索引值为1(midx=1)的存储单元中存储的数据则为:帧索引值为2^i的帧文件的起始位置及对应的总点数信息。以此类推,单元索引值为p的存储单元中存储的数据为:帧索引值为p*(2^i)的帧文件的起始位置及对应的总点数信息。。
相应的,为了实现上述任一种音频文件解码存储方法,本发明还提供了一种音频文件存储系统。由于本发明提供的音频文件存储系统的工作原理与本发明提供的音频文件存储方法的原理相同或相似,因此重复之处不再赘述。
参见图4,作为本发明的音频文件存储系统110的一具体实施例,其包括存储设置模块111,解析存储模块112和删除复制模块113。其中,存储设置模块111,被配置为设置具有M个存储单元的存储空间,并对每个存储单元设置相应的单元索引值。应当说明的是,M的取值为2n,且n的取值为大于或等于3的正整数。解析存储模块112,被配置为当音频文件处于正常播放模式或快进模式时,解析音频文件,并将解析得到的每一帧的起始位置及对应的总点数顺序保存至存储空间中的存储单元中。其中,总点数为每一帧的起始位置前面所有帧解码后对应的总点数。删除复制模块113,被配置为当存储空间存满时,删除单元索引值为奇数的存储单元中存储的起始位置及对应的总点数,并将剩余的起始位置及对应的总点数依次复制到前M/2的存储空间中。
其中,应当说明的是,采用本发明的音频文件存储系统110进行音频文件解码后的存储过程中,当存储空间第i次存满时,单元索引值为p的存储单元中存储的数据为第p*(2^i)帧的起始位置及对应的总点数;且p=0……M-1。
进一步的,当对音频文件进行解码存储后,在音频文件播放过程中,有时需要对音频文件进行快进或快退处理。传统的对音频文件进行快进快退处理时,通常是从存储的所有帧的起始地址及对应点数的数据库中进行全面搜索,直至搜索到目标时间点。而从存储的所有数据中进行全面搜索直至搜索到实际目标时间点,需要消耗大量的时间,这就很容易导致音频文件快进或快退速度反应较慢,从而降低用户体验。
因此,为了避免上述传统的音频文件快进或快退反应速度较慢的问题,基于上述任一种音频文件存储方法,本发明还提供了一种音频文件快进快退方法。
其中,作为本发明的音频文件快进快退方法的一具体实施例,其在上述任一种音频文件存储方法的基础之上,还包括步骤S400,判断接收到的信号类型。当判断出信号类型为快进信号时,则执行步骤S410,根据接收到的快进信号,获取相应的第一目标点数aim_points1。当判断出信号类型为快退信号时,则执行步骤S410’,根据接收到的快退信号,获取相应的第二目标点数aim_points2。
其中,需要说明的是,当接收到的信号为快进信号时,其获取的第一目标点数aim_points1为音频文件需要快速前进至实际所需播放的位置所对应的总点数。当接收到的信号为快退信号时,其获取的第二目标点数aim_points2则为音频文件中需要快速退回至已经播放过的需要再重新播放的位置所对应的总点数。
另外,作为本发明的音频文件快进快退方法的一具体实施例,其根据接收到的快进信号,获取相应的第一目标点数,具体可通过以下步骤来实现。
首先,通过执行步骤S411,根据接收到的快进信号,获取需要快进的时间。也就是说,根据接收到的快进信号,获取音频文件实际需要快进的时间。进而再通过步骤S412,根据音频文件的采样率和需要快进的时间,计算得到需要快进的点数。其中,音频文件的采样率可通过读取音频文件的“同步头”获取。最后,再通过步骤S413,根据计算得到的需要快进的点数,并结合当前位于音频文件位置处对应的当前数据点数(即,当前帧文件的数据点数),计算得到第一目标点数aim_points1。
相应的,当接收到的信号类型为快退信号时,其通过步骤S410’,根据接收到的快退信号,获取相应的第二目标点数同样也可通过以下步骤来实现。
首先,通过执行步骤S411’,根据接收到的快退信号,获取需要快退的时间。也就是说,根据接收到的快退信号,获取音频文件实际需要快退的时间。进而再通过步骤S412’,根据音频文件的采样率和需要快退的时间,计算得到需要快退的点数。其中,音频文件的采样率可通过读取音频文件的“同步头”获取。最后,再通过步骤S413’,根据计算得到的需要快退的点数,并结合当前位于音频文件位置处对应的当前数据点数(即,当前帧文件的数据点数),计算得到第二目标点数aim_points2。
进一步的,由于接收到的信号既可为快进信号,还可以是快退信号。因此,相应的,此时音频文件的播放方式可包括有两种。
具体的,当接收到的信号为快进信号时,音频文件处于快进模式。此时,则需要执行步骤S500,解析音频文件的当前帧,获取当前帧的起始位置对应的当前总点数及当前帧的当前数据点数。进而再通过步骤S600,根据第一目标点数aim_points1、获取的当前总点数和当前数据点数,判断是否需要对当前帧进行解码。即,通过根据第一目标点数aim_points1,解析音频文件的“同步头”和“帧信息”获取的当前帧的起始位置对应的当前总点数dq_grpoint以及当前帧的当前数据点数dq_block_size,判断当前帧是否为实际快进至即将播放的帧数据。若是,则表明当前帧即为实际需要播放的帧文件。因此,可执行步骤S700,对当前帧进行解码,并输出解码后的数据流,实现当前帧的播放。若否,则表明当前帧并不是实际需要播放的帧文件,因此则执行步骤S200,进行当前帧的起始位置及其对应的当前总点数的存储,同时还返回步骤S500,进行下一帧的解析,直至寻找到实际需要播放的帧文件。
进一步的,在接收到的信号为快进信号,音频文件进入快进模式过程中,步骤S600,根据第一目标点数、获取的当前总点数和当前数据点数,判断是否需要对当前帧进行解码则具体可通过以下步骤来实现。
首先,通过步骤S610,判断第一目标点数aim_points1是否大于或等于当前总点数dq_grpoint,且小于当前总点数dq_grpoint与当前数据点数dq_block_size之和。即,判断是否满足dq_grpoint≤aim_points1<dq_grpoint+dq_block_size。若是,则执行步骤S620,判断出需要对当前帧进行解码输出。若否,则执行步骤S630,判断出不需要对当前帧进行解码输出。
其通过根据第一目标点数aim_points1、当前总点数dq_grpoint以及当前总点数dq_grpoint与当前数据点数dq_block_size之和之间的大小关系进行判断,以实现对当前帧文件的判断,其方法简单,易于实现。并且,通过采用第一目标点数aim_points1进行判断,使得判断条件数值化,从而有效提高了判断结果的精确性。
更进一步的,当接收到快退信号,音频文件处于快退模式时,此时则首先执行步骤S500’,搜索存储空间中存储的所有数据,由存储空间中查找到最接近第二目标点数的总点数作为最接近总点数,并根据最接近总点数对应的单元索引值获取最接近第二目标点数的起始位置作为最接近起始位置。
进而再执行步骤S600’,跳转到音频文件的最接近起始位置,并解析最接近起始位置对应的帧文件,按照音频文件处于快进模式时的方法,对帧文件进行解码输出或进行帧文件的下一帧文件的解析。
具体的,由于在本发明的音频文件存储方法中,将解析得到的每一帧的起始位置及对应的总点数顺序保存至存储空间中的存储单元中时,还包括对保存的每一帧设置相应的帧索引值的步骤。其中,帧索引值的取值为自然数。相应的,当对音频文件进行快退操作时,步骤S500’,搜索存储空间中存储的所有数据,由存储空间中查找到最接近第二目标点数的总点数作为最接近总点数,并根据最接近总点数对应的单元索引值获取最接近第二目标点数的起始位置作为最接近起始位置,可通过以下步骤来实现。
首先执行步骤S510’,搜索存储空间中存储的所有数据,比较存储空间中存储的所有总点数与第二目标点数的大小,确定小于等于第二目标点数中最大的总点数作为最接近总点数。即,搜索具有M个存储单元的内存空间中存放的有效数据,比较所存的所有的grpoint与第二目标点数aim_points2的大小,找到一个小于等于aim_points2的最大的grpoint值。然后执行步骤S520’,根据最接近总点数对应的单元索引值,按照公式:最接近第二目标点数的帧文件的帧索引值=最接近总点数对应的单元索引值*2i,计算得到最接近第二目标点数的帧文件的帧索引值。即,当确定小于等于aim_points2的最大的grpoint值后,获取该小于等于aim_points2的最大的grpoint值对应的单元索引值aim_idx,进而再按照fidx=aim_idx*2^i计算得到相应的帧索引值fidx。最后再执行步骤S530’,根据帧索引值,确定帧索引值对应的帧文件的起始位置作为最接近起始位置,并跳转到第fidx=aim_idx*2^i帧对应音频文件的位置fileptr后,再按照快进模式下相同方法,找准第二目标点数,解码播出,从而实现音频文件的快退操作。
此处需要说明的是,当确定最接近第二目标点数的最接近起始位置后,按照音频文件在快进模式下的方法进行第二目标点数的确定时,其判断条件应为dq_grpoint2≤aim_points2<dq_grpoint2+dq_block_size2。其中,aim_points2为获取的第二目标点数,dq_grpoint2为所确定的最接近起始位置对应的当前总点数,dq_block_size2为最接近起始位置的帧文件的当前数据点数。
本发明的音频文件快进快退方法,通过保存音频文件中的某一部分帧的起始位置及该位置前面所有帧解码之后对应的总点数,加快了由存储的数据中搜索到目标点数对应文件位置的速度,有效提升了音频文件播放体验。同时,还节省了内存空间资源,降低了存储成本。
相应的,为了实现上述任一种音频文件快进快退方法,本发明还提供了一种音频文件快进快退系统。由于本发明提供的音频文件快进快退系统的工作原理与本发明提供的音频文件快进快退方法的原理相同或相似,因此重复之处不再赘述。
作为本发明的音频文件快进快退系统,其包括前面任一种音频文件存储系统110,还包括信号类型判断模块、目标点数获取模块、解析文件模块、判断控制模块和搜索查找模块。其中,信号类型判断模块,被配置为判断接收到的信号类型。目标点数获取模块,被配置为信号类型判断模块判断出信号类型为快进信号时,根据接收到的快进信号,获取相应的第一目标点数。解析文件模块,被配置为当接收到快进信号,音频文件处于快进模式时,解析音频文件的当前帧,获取当前帧的起始位置对应的当前总点数及当前帧的当前数据点数。判断控制模块,被配置为根据第一目标点数、获取的当前总点数和当前数据点数,判断是否需要对当前帧进行解码;若是,则对当前帧进行解码,并输出解码后的数据流;若否,则跳转至音频文件存储系统进行当前帧的起始位置及对应的当前总点数的存储操作,并进行下一帧的解析。
同时,目标点数获取模块,还被配置为信号类型判断模块判断出信号类型为快退信号时,根据接收到的快退信号,获取相应的第二目标点数。相应的,搜索查询模块,被配置为当接收到快退信号,音频文件处于快退模式时,搜索存储空间中存储的所有数据,由存储空间中查找到最接近第二目标点数的总点数作为最接近总点数,并根据最接近总点数对应的单元索引值获取最接近第二目标点数的起始位置作为最接近起始位置。解析文件模块,还被配置为跳转到音频文件的最接近起始位置,并解析最接近起始位置对应的帧文件。判断控制模块,还被配置为按照音频文件处于快进模式时的方法,对帧文件进行解码输出或进行帧文件的下一帧文件的解析。
进一步的,目标点数获取模块包括时间获取单元、点数计算单元和目标点数计算单元。其中,时间获取单元,被配置为根据接收到的快进信号,获取需要快进的时间。点数计算单元,被配置为根据音频文件的采样率和需要快进的时间,计算得到需要快进的点数。目标点数计算单元,被配置为根据计算得到的需要快进的点数,并结合当前位于音频文件位置处对应的当前数据点数,计算得到第一目标点数。
需要说明的是,时间获取单元,还被配置为根据接收到的快退信号,获取需要快退的时间。点数计算单元,还被配置为根据音频文件的采样率和需要快退的时间,计算得到需要快退的点数。目标点数计算单元,还被配置为根据计算得到的需要快退的点数,并结合当前位于音频文件位置处对应的当前数据点数,计算得到第二目标点数。
更进一步的,判断控制模块包括第一判断单元和第一控制单元。其中,第一判断单元,被配置为判断第一目标点数是否大于或等于当前总点数,且小于当前总点数与当前数据点数之和。第一控制单元,被配置为第一判断单元判断出第一目标点数大于或等于当前总点数,且小于当前总点数与当前数据点数之和时,对当前帧进行解码输出。第一控制单元,被配置为第一判断单元判断出第一目标点数小于当前总点数,或大于等于当前总点数与当前数据点数之和时,直接跳转至音频文件存储系统和解析文件模块。
另外,作为本发明的音频文件快进快退系统的另一具体实施例,其音频文件存储系统还包括帧索引值设置模块。帧索引值设置模块,被配置为音频文件存储系统中的解析存储模块将解析得到的每一帧的起始位置及对应的总点数顺序保存至存储空间中的存储单元中时,对保存的每一帧设置相应的帧索引值;其中,帧索引值的取值为自然数。
并且,搜索查询模块包括比较确定单元、帧索引值计算单元和最接近起始位置确定单元。其中,比较确定单元,被配置为搜索存储空间中存储的所有数据,比较存储空间中存储的所有总点数与第二目标点数的大小,确定小于等于第二目标点数中最大的总点数作为最接近总点数。帧索引值计算单元,被配置为根据最接近总点数对应的单元索引值,按照公式:最接近第二目标点数的帧文件的帧索引值=最接近总点数对应的单元索引值*2i,计算得到最接近第二目标点数的帧文件的帧索引值。最接近起始位置确定单元,被配置为根据帧索引值,确定帧索引值对应的帧文件的起始位置作为最接近起始位置。
以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。