发明内容
基于此,有必要提供一种音频文件数据重排序的方法,用于对重排序内存空间占用进行优化。
一种音频文件数据重排序的方法,包括以下步骤:
根据音频文件数据的缩放因子频带的宽度设定预设个数的轮转因子;一个所述轮转因子对应所述缩放因子频带的一个频率线,适用于引导所述缩放因子频带的多个频率线重排序;
根据预设公式计算所述缩放因子频带的频率线的目标位置;所述预设公式表征所述缩放因子频带的频率线的原始位置、所述轮转因子与所述缩放因子频带的频率线的目标位置三者之间的关系;
通过预设中间变量将位于所述原始位置的频率线对应的数据赋值到所述目标位置。
在其中一个实施例中,所述通过预设中间变量将位于所述原始位置的频率线对应的数据赋值到所述目标位置步骤包括:
将所述目标位置的频率线对应的数据暂时存储到预设中间变量中;
将所述原始位置的频率线对应的数据赋值到所述目标位置;
将所述目标位置设为新的原始位置,并将所述预设中间变量中暂时存储的数据作为所述新的原始位置的频率线对应的数据;
重复上述三步,直至通过所述预设公式计算出的目标位置为所述轮转因子对应的频率线的位置时止。
在其中一个实施例中,在所述音频文件数据的解码过程中,所述预设公式为:g=(n*p)%(n*w-1);
其中,(n*p)%(n*w-1)表示(n*p)整除(n*w-1)以后的余数,g为所述缩放因子频带的频率线的目标位置,p为所述缩放因子频带的频率线的原始位置,w为所述缩放因子频带的宽度,n为所述缩放因子频带的频率线的窗值个数,且根据预设公式计算所述缩放因子频带的频率线的目标位置的步骤,是由所述轮转因子对应的所述频率线开始计算所述缩放因子频带的频率线的目标位置。
在其中一个实施例中,在所述音频文件数据的编码过程中,所述预设公式为:g=w*(p%n)+p/n;
其中,p%n表示p整除n以后的余数,p/n表示p与n相除结果的整数部分,g为所述缩放因子频带的频率线的目标位置,p为所述缩放因子频带的频率线的原始位置,w为所述缩放因子频带的宽度,n为所述缩放因子频带的频率线的窗值个数,且根据预设公式计算所述缩放因子频带的频率线的目标位置的步骤,是由所述轮转因子对应的所述频率线开始计算所述缩放因子频带的频率线的目标位置。
在其中一个实施例中,所述频率线对应的数据类型为浮点数和/或定点数。
另外,本发明还提出一种音频文件数据重排序的系统,包括轮转因子设定模块、数据库、目标位置计算模块和数据赋值模块;
所述轮转因子设定模块,被配置以根据音频文件数据的缩放因子频带的宽度设定轮转因子;一个所述轮转因子对应所述缩放因子频带的一个频率线,适用于引导所述缩放因子频带的多个频率线重排序;
所述数据库,被配置以存储预设公式;所述预设公式表征所述缩放因子频带的频率线的原始位置、所述轮转因子和所述缩放因子频带的频率线的目标位置三者之间的关系;
所述目标位置计算模块,被配置以连接所述数据库并获取所述预设公式,根据所述预设公式计算所述缩放因子频带的频率线的目标位置;
所述数据赋值模块,被配置以通过预设中间变量将位于所述原始位置的频率线对应的数据赋值到所述目标位置。
在其中一个实施例中,所述数据赋值模块通过预设中间变量将位于所述原始位置的频率线对应的数据赋值到所述目标位置的方法包括以下步骤:
将所述目标位置的频率线对应的数据暂时存储到预设中间变量中;
将所述原始位置的频率线对应的数据赋值到所述目标位置;
将所述目标位置设为新的原始位置,并将所述预设中间变量中暂时存储的数据作为所述新的原始位置的频率线对应的数据;
重复上述三步,直至通过所述预设公式计算出的目标位置为所述轮转因子对应的频率线的位置时止。
在其中一个实施例中,在所述音频文件数据的解码过程中,所述预设公式为:g=(n*p)%(n*w-1);
其中,(n*p)%(n*w-1)表示(n*p)整除(n*w-1)以后的余数,g为所述缩放因子频带的频率线的目标位置,p为所述缩放因子频带的频率线的原始位置,w为所述缩放因子频带的宽度,且所述目标位置计算模块根据所述预设公式计算所述缩放因子频带的频率线的目标位置的过程,是由所述轮转因子对应的所述频率线开始计算所述缩放因子频带的频率线的目标位置。
在其中一个实施例中,在所述音频文件数据的编码过程中,所述预设公式为:g=w*(p%n)+p/n;
其中,p%n表示p整除n以后的余数,p/n表示p与n相除结果的整数部分,g为所述缩放因子频带的频率线的目标位置,p为所述缩放因子频带的频率线的原始位置,w为所述缩放因子频带的宽度,n为所述缩放因子频带的频率线的窗值个数,且所述目标位置计算模块根据所述预设公式计算所述缩放因子频带的频率线的目标位置的过程,是由所述轮转因子对应的所述频率线开始计算所述缩放因子频带的频率线的目标位置。
在其中一个实施例中,所述频率线对应的数据类型为浮点数和/或定点数。
上述音频文件数据重排序的方法和系统,根据缩放因子频带的宽度设定预设个数的轮转因子,根据预设公式计算缩放因子频带的频率线的目标位置,通过预设中间变量将位于原始位置的频率线对应的数据赋值到目标位置,能够大大减少读写操作的次数,节省内存空间资源,从而提升音频文件编码和解码的效率。
具体实施方式
为使本发明的目的、技术方案及优点更加清楚明白,以下结合附图对本发明音频文件数据重排序的方法和系统的具体实施方式进行说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
参见图1,一个实施例中,本发明音频文件数据重排序的方法包括以下步骤:
S100,根据音频文件数据的缩放因子频带的宽度设定预设个数的轮转因子。
其中,一个轮转因子对应音频文件数据的缩放因子频带的一个频率线,适用于引导缩放因子频带的多个频率线重排序。缩放因子频带的宽度不同,轮转因子的个数可能不同。例如,轮转因子的个数可以为两个、三个或其他数目,即本步骤中的预设个数可以为两个、三个或其他数目。对于宽度为4、采样率为48K的缩放因子频带,轮转因子的个数为两个。
一般的,可以通过穷举法,根据缩放因子频带宽度设定预设个数的轮转因子。
S200,根据预设公式计算缩放因子频带的频率线的目标位置。
其中,预设公式表征缩放因子频带的频率线的原始位置、轮转因子和缩放因子频带的频率线的目标位置三者之间的关系。可以理解的,在对数据进行IMDCT处理之前,要对缩放因子频带的频率线的顺序进行重新排列,依据的就是MDCT处理输出的顺序。
一个实施例中,在音频文件数据的解码过程中,对应的预设公式可以为:g=(n*p)%(n*w-1);
其中,(n*p)%(n*w-1)表示(n*p)整除(n*w-1)以后的余数,g为缩放因子频带的频率线的目标位置,p为缩放因子频带的频率线的原始位置,w为缩放因子频带的宽度,n为缩放因子频带的频率线的窗值个数,对于不同格式的音频文件,n的取值可能不同。例如,对于MP3音频文件,n的取值为3,而对于AAC(Advanced Audio Coding,高级音频编码)音频文件,n的取值则不一定为3。且步骤200是由轮转因子对应的所述频率线开始计算缩放因子频带的频率线的目标位置的。
而在音频文件数据的编码过程中,对应的预设公式可以为:g=w*(p%n)+p/n;
其中,p%n表示p整除n以后的余数,p/n表示p与n相除结果的整数部分,g为缩放因子频带的频率线的目标位置,p为缩放因子频带的频率线的原始位置,w为缩放因子频带的宽度,n为缩放因子频带的频率线的窗值个数,对于不同格式的音频文件,n的取值可能不同。例如,对于MP3音频文件,n的取值为3,而对于AAC(Advanced Audio Coding,高级音频编码)音频文件,n的取值则不一定为3。且步骤200是由轮转因子对应的频率线开始计算缩放因子频带的频率线的目标位置的。
在后续部分内容中,将以一个较为具体的实施例对预设公式进行说明。
S300,将位于所述原始位置的频率线对应的数据赋值到所述目标位置。
参见图2,一个实施例中,步骤S300可以包括以下步骤:
S310,将目标位置的频率线对应的数据暂时存储到预设中间变量中。
可以理解的,若直接将原始位置的频率线对应的数据直接赋值到计算得出的目标位置,则在重排序的后续的过程中会因为目标位置的频率线对应的数据直接被原始位置的频率线对应的原始数据覆盖掉而出错。针对上述问题,可以通过一预设中间变量,先将目标位置的频率线对应的数据暂时存储到该预设中间变量中,然后将原汁位置的频率线对应的数据赋值到目标位置。
S320,将原始位置的频率线对应的数据赋值到目标位置。
通过步骤310将目标位置的频率线对应的数据暂时存储到预设中间变量中后,目标位置暂时无对应的数据。因此,可以将原始位置的频率线对应的数据赋值到目标位置。此时,完成对一个位于原始位置的频率线的重排序。
S330,将目标位置设为新的原始位置,并将预设中间变量中暂时存储的数据作为新的原始位置的频率线对应的数据。
将目标位置作为新的原始位置,并将步骤S310中暂时存储到预设中间变量的数据作为新的原始位置的频率线对应的数据,从而可以根据步骤S310和S320对新的原始位置的频率线进行重排序。
S340,重复上述三步,直至通过预设公式计算出的目标位置为轮转因子对应的频率线的位置时止。
将目标位置作为新的原始位置,并将步骤S310中暂时存储到预设中间变量的数据作为新的原始位置的频率线对应的数据后,重复步骤S310、S320和S330,从而完成第二个频率线的重排序工作。
参照上述过程,对其他频率线进行重排序,直至通过预设公式计算出的目标位置与轮转因子对应的频率线的位置为同一位置,则完成步骤S300的内容。
需要说明的是,本实施例中,频率线对应的数据类型为浮点数和/或定点数。
以下以编码过程为例,对本发明音频文件数据重排序的方法进行详细说明。
表1重排序后位置与原始位置的对比
重排序步骤 |
原始位置 |
重排序后位置 |
1 |
0 |
0 |
2 |
1 |
4 |
3 |
4 |
5 |
4 |
5 |
9 |
5 |
9 |
3 |
6 |
3 |
1 |
7 |
2 |
8 |
8 |
8 |
10 |
9 |
10 |
7 |
10 |
7 |
6 |
11 |
6 |
2 |
12 |
11 |
11 |
参见表1,如前所述,原始位置中的位于第一位置的频率线和位于倒数第一位置的频率线,在重排序过程中位置不会变动。因此,只需对位于第二位置到倒数第二位置的频率线进行重排序。本实施例中,缩放因子频带的宽度为4,缩放因子频带的频率线的窗值个数为3。
首先,根据缩放因子频带的宽度设定预设个数的轮转因子。本实施例中,设定的轮转因子的个数为两个。第一个轮转因子对应的频率线的原始位置为1,第二个轮转因子对应的频率线的原始位置为2。
然后,依据公式:g=w*(p%3)+p/3,并由第一个轮转因子对应的频率线开始,计算各个频率线的目标位置,并重排序。具体过程为:
计算第一个轮转因子对应的频率线的目标位置g=w*(p%3)+p/3=4,则将目标位置(即原始位置为第4的位置)的频率线对应的数据暂时存储到预设中间变量,然后将第一个轮转因子对应的频率线对应的数据赋值到目标位置(即原始位置为第4的位置);
计算第4个频率线的目标位置g=w*(p%3)+p/3=5,则将目标位置(即原始位置为第5的位置)的频率线对应的数据暂时存储到预设中间变量,然后将预设中间变量中存储的原始位置为第4的位置的频率线对应的数据赋值到目标位置(即原始位置为第5的位置);
依次计算,直至计算得出的目标位置等于第一个轮转因子对应的频率线的原始位置。此时,通过第一个轮转因子引导相关的频率线的重排序完成。然后按照上述方法通过第二个轮转因子引导其他的频率线重排序。
原始位置0和11出的数据在重排序过程中位置不会变化。本实施例中,采用本发明音频文件数据重排序的方法,通过10次读/写操作就实现了缩放因子频带宽度为4的缩放因子频带的重排序;完成一个粒度576条频率线的重排序只需进行550次频率线读/写操作、13个起始索引读操作,8至21次轮转因子读操作即可。而采用现有方法,需要首先把缩放因子频带的频率线对应的数据重新排序到缓存中,然后把数据从缓存中赋值到缩放因子频带中,共需要24次读/写操作;完成一个粒度576条频率线的重排序需要576点的缓存、576*2次读操作和576*2次的写操作。由此可见,采用本发明音频文件数据重排序的方法能够大大减少读写操作的次数,节省内存空间资源,从而提升了音频文件编码的效率。
对于在解码过程中对缩放因子频带的频率线的重排序的过程参照上述在编码过程中对缩放因子频带的频率线的重排序过程即可,故在此不再赘述。一个实施例中,上述的音频文件可以为MP3或其他格式的音频文件。
上述音频文件数据重排序的方法,根据缩放因子频带的宽度设定预设个数的轮转因子,根据预设公式计算缩放因子频带的频率线的目标位置,通过预设中间变量将位于原始位置的频率线对应的数据赋值到目标位置,能够大大减少读写操作的次数,节省内存空间资源,从而提升音频文件编码和解码的效率。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)或随机存储记忆体(Random AccessMemory,RAM)等。
基于同一发明构思,本发明实施例提供一种音频文件数据重排序的系统,由于此系统解决问题的原理与前述一种音频文件数据重排序的方法相似,因此,该系统的实施可以按照前述方法的具体步骤实现,重复之处不再赘述。
参见图3,一个实施例中,本发明音频文件数据重排序的系统包括:轮转因子设定模块100、数据库200、目标位置计算模块300和数据赋值模块400。
轮转因子设定模块100,被配置以根据音频文件数据的缩放因子频带的宽度设定轮转因子。
其中,一个轮转因子对应音频文件数据的缩放因子频带的一个频率线,适用于引导所述缩放因子频带的多个频率线重排序。缩放因子频带的宽度不同,轮转因子的个数可能不同。例如,轮转因子的个数可以为两个、三个或其他数目,即本步骤中的预设个数可以为两个、三个或其他数目。对于宽度为4、采样率为48K的缩放因子频带,轮转因子的个数为两个。
一般的,可以通过穷举法,根据缩放因子频带宽度设定预设个数的轮转因子。
数据库200,被配置以存储预设公式。
其中,预设公式表征缩放因子频带的频率线的原始位置、轮转因子和缩放因子频带的频率线的目标位置三者之间的关系。可以理解的,在对数据进行IMDCT处理之前,要对缩放因子频带的频率线的顺序进行重新排列,依据的就是MDCT处理输出的顺序。
一个实施例中,在音频文件数据的解码过程中,对应的预设公式可以为:g=(n*p)%(n*w-1);
其中,(n*p)%(n*w-1)表示(n*p)整除(n*w-1)以后的余数,g为缩放因子频带的频率线的目标位置,p为缩放因子频带的频率线的原始位置,w为缩放因子频带的宽度,n为缩放因子频带的频率线的窗值个数。对于不同格式的音频文件,n的取值可能不同。例如,对于MP3音频文件,n的取值为3,而对于AAC(Advanced Audio Coding,高级音频编码)音频文件,n的取值则不一定为3。
在音频文件数据的编码过程中,对应的预设公式可以为:g=w*(p%n)+p/n;
其中,p%n表示p整除n以后的余数,p/n表示p与n相除结果的整数部分,g为缩放因子频带的频率线的目标位置,p为缩放因子频带的频率线的原始位置,w为缩放因子频带的宽度,n为缩放因子频带的频率线的窗值个数。对于不同格式的音频文件,n的取值可能不同。例如,对于MP3音频文件,n的取值为3,而对于AAC(Advanced Audio Coding,高级音频编码)音频文件,n的取值则不一定为3。
在后续部分内容中,将以一个较为具体的实施例对预设公式进行进一步的说明。
目标位置计算模块300,被配置以连接数据库200并获取预设公式,根据预设公式计算缩放因子频带的频率线的目标位置。
具体的,目标位置计算模块300连接数据库200,并根据此时为编码或解码过程,获取数据库200中存储的编码或解码过程对应的预设公式计算缩放因子频带的频率线的目标位置。
另外,在音频文件数据的编码和解码过程中,目标位置计算模块300根据所述预设公式计算所述缩放因子频带的频率线的目标位置的过程,均是由轮转因子对应的频率线开始计算缩放因子频带的频率线的目标位置的。
数据赋值模块400,被配置以将位于原始位置的频率线对应的数据赋值到目标位置。
一个实施例中,数据赋值模块400通过预设中间变量将位于原始位置的频率线对应的数据赋值到目标位置的方法可以包括以下步骤:
首先,将目标位置的频率线对应的数据暂时存储到预设中间变量中。
可以理解的,若直接将原始位置的频率线对应的数据直接赋值到计算得出的目标位置,则在重排序的后续的过程中会因为目标位置的频率线对应的数据直接被原始位置的频率线对应的原始数据覆盖掉而出错。针对上述问题,可以通过一预设中间变量,先将目标位置的频率线对应的数据暂时存储到该预设中间变量中,然后将原汁位置的频率线对应的数据赋值到目标位置。
然后,将原始位置的频率线对应的数据赋值到目标位置。
通过上一步骤将目标位置的频率线对应的数据暂时存储到预设中间变量中后,目标位置暂时无对应的数据。因此,可以将原始位置的频率线对应的数据赋值到目标位置。此时,完成对一个位于原始位置的频率线的重排序。
其次,将目标位置设为新的原始位置,并将预设中间变量中暂时存储的数据作为新的原始位置的频率线对应的数据。
将目标位置作为新的原始位置,并将步骤S310中暂时存储到预设中间变量的数据作为新的原始位置的频率线对应的数据,从而可以根据步骤S310和S320对新的原始位置的频率线进行重排序。
重复上述三步,直至通过预设公式计算出的目标位置为轮转因子对应的频率线的位置时止。
将目标位置作为新的原始位置,并将步骤第一个步骤中暂时存储到预设中间变量的数据作为新的原始位置的频率线对应的数据后,重复上述三个步骤,从而完成第二个频率线的重排序工作。
参照上述过程,对其他频率线进行重排序,直至通过预设公式计算出的目标位置与轮转因子对应的频率线的位置为同一位置,则完成对缩放因子频带的频率线的重排序。
需要说明的是,本实施例中,频率线对应的数据类型为浮点数和/或定点数。
以下以编码过程为例,对本发明音频文件数据重排序的系统的工作过程进行详细说明。
表2重排序后位置与原始位置的对比
重排序步骤 |
原始位置 |
重排序后位置 |
1 |
0 |
0 |
2 |
1 |
4 |
3 |
4 |
5 |
4 |
5 |
9 |
5 |
9 |
3 |
6 |
3 |
1 |
7 |
2 |
8 |
8 |
8 |
10 |
9 |
10 |
7 |
10 |
7 |
6 |
11 |
6 |
2 |
12 |
11 |
11 |
参见表2,如前所述,原始位置中的位于第一位置的频率线和位于倒数第一位置的频率线,在重排序过程中位置不会变动。因此,只需对位于第二位置到倒数第二位置的频率线进行重排序。本实施例中,缩放因子频带的宽度为4,n为缩放因子频带的频率线的窗值个数为3。
首先,根据缩放因子频带的宽度设定预设个数的轮转因子。本实施例中,设定的轮转因子的个数为两个。第一个轮转因子对应的频率线的原始位置为1,第二个轮转因子对应的频率线的原始位置为2。
然后,依据公式:g=w*(p%3)+p/3,并由第一个轮转因子对应的频率线开始,计算各个频率线的目标位置,并重排序。具体过程为:
计算第一个轮转因子对应的频率线的目标位置g=w*(p%3)+p/3=4,则将目标位置(即原始位置为第4的位置)的频率线对应的数据暂时存储到预设中间变量,然后将第一个轮转因子对应的频率线对应的数据赋值到目标位置(即原始位置为第4的位置);
计算第4个频率线的目标位置g=w*(p%3)+p/3=5,则将目标位置(即原始位置为第5的位置)的频率线对应的数据暂时存储到预设中间变量,然后将预设中间变量中存储的原始位置为第4的位置的频率线对应的数据赋值到目标位置(即原始位置为第5的位置);
依次计算,直至计算得出的目标位置等于第一个轮转因子对应的频率线的原始位置。此时,通过第一个轮转因子引导相关的频率线的重排序完成。然后按照上述方法通过第二个轮转因子引导其他的频率线重排序。
原始位置0和11出的数据在重排序过程中位置不会变化。本实施例中,采用本发明音频文件数据重排序的系统,通过10次读/写操作就实现了缩放因子频带宽度为4的缩放因子频带的重排序;完成一个粒度576条频率线的重排序只需进行550次频率线读/写操作、13个起始索引读操作,8至21次轮转因子读操作即可。而采用现有方法,需要首先把缩放因子频带的频率线对应的数据重新排序到缓存中,然后把数据从缓存中赋值到缩放因子频带中,共需要24次读/写操作;完成一个粒度576条频率线的重排序需要576点的缓存、576*2次读操作和576*2次的写操作。由此可见,采用本发明音频文件数据重排序的系统能够大大减少读写操作的次数,节省内存空间资源,从而提升了音频文件编码的效率。
对于在解码过程中对缩放因子频带的频率线的重排序的过程参照上述在编码过程中对缩放因子频带的频率线的重排序过程即可,故在此不再赘述。一个实施例中,上述的音频文件可以为MP3或其他格式的音频文件。
上述音频文件数据重排序的系统,根据缩放因子频带的宽度设定预设个数的轮转因子,根据预设公式计算缩放因子频带的频率线的目标位置,通过预设中间变量将位于原始位置的频率线对应的数据赋值到目标位置,能够大大减少读写操作的次数,节省内存空间资源,从而提升音频文件编码解码的效率。
上述音频文件数据重排序的系统,根据缩放因子频带的宽度设定预设个数的轮转因子,根据预设公式计算缩放因子频带的频率线的目标位置,通过预设中间变量将位于原始位置的频率线对应的数据赋值到目标位置,能够大大减少读写操作的次数,节省内存空间资源,从而提升音频文件的编码和解码的效率。
以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。