音频的解码方法及装置转让专利

申请号 : CN201110383341.8

文献号 : CN102522088B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 李昙张本好徐晶明吴晟林福辉

申请人 : 展讯通信(上海)有限公司

摘要 :

一种音频的解码方法及装置,所述音频的解码方法包括:获取音频码流中的帧,所述音频码流中的帧包括主数据、该帧的同步数据和该帧的数据偏移量,所述该帧的数据偏移量为该帧的解码用数据的起始位置相对于该帧的同步数据的偏移量;将当前帧内的主数据存入缓冲器中;基于缓冲器中的主数据的长度及下一帧的数据偏移量,确定所述当前帧的解码用数据;解码所述当前帧的解码用数据。本发明的技术方案提高了音频码流的解码效率,且降低了解码的复杂度,提高了解码质量。

权利要求 :

1.一种音频的解码方法,其特征在于,包括:

获取音频码流中的帧,所述音频码流中的帧包括主数据、该帧的同步数据和该帧的数据偏移量,所述该帧的数据偏移量为该帧的解码用数据的起始位置相对于该帧的同步数据的偏移量;

将当前帧内的主数据存入缓冲器中;

基于所述缓冲器中的主数据的长度及下一帧的数据偏移量,确定所述当前帧的解码用数据;所述基于所述缓冲器中的主数据的长度及下一帧的数据偏移量,确定所述当前帧的解码用数据包括:将所述缓冲器中的主数据的长度与所述下一帧的数据偏移量做差获取所述当前帧的解码用数据的长度;确定所述当前帧的解码用数据的起始位置为所述缓冲器中主数据的开始位置,确定所述当前帧的解码用数据的终止位置为所述起始位置向后偏移所述解码用数据的长度;

解码所述当前帧的解码用数据。

2.如权利要求1所述的音频的解码方法,其特征在于,所述将当前帧内的主数据存入缓冲器中包括:从所述缓冲器中的主数据的结束位置开始,存储所述当前帧内的主数据。

3.如权利要求1所述的音频的解码方法,其特征在于,还包括,解码所述当前帧的解码用数据之后,删除所述缓冲器中的当前帧的解码用数据。

4.如权利要求3所述的音频的解码方法,其特征在于,所述删除所述缓冲器中的当前帧的解码用数据包括:将所述缓冲器中的主数据向前移动所述当前帧的解码用数据的长度。

5.如权利要求3所述的音频的解码方法,其特征在于,在所述将当前帧内的主数据存入缓冲器中之前还包括:若所述缓冲器中的主数据的长度小于所述当前帧的数据偏移量,则将所述当前帧内的主数据存入所述缓冲器后将所述下一帧设置为当前帧;

若所述缓冲器中的主数据的长度大于所述当前帧的数据偏移量,则删除从所述缓冲器中的主数据的结束位置开始向前偏移所述当前帧的数据偏移量之前的主数据。

6.如权利要求3所述的音频的解码方法,其特征在于,在所述将当前帧内的主数据存入缓冲器中之后,确定所述当前帧的解码用数据之前还包括:若所述缓冲器中的主数据的长度小于或等于所述下一帧的数据偏移量,则将所述下一帧设置为当前帧。

7.如权利要求3所述的音频的解码方法,其特征在于,在所述将当前帧内的主数据存入缓冲器中之前还包括:记录所述缓冲器中的主数据的长度为比对长度,在所述将当前帧内的主数据存入缓冲器中之后,确定所述当前帧的解码用数据之前还包括:若所述缓冲器中的当前的主数据的长度小于或等于所述下一帧的数据偏移量,则将所述下一帧设置为当前帧;

若所述缓冲器中的当前的主数据的长度大于所述下一帧的数据偏移量,则比对所述比对长度与所述当前帧的数据偏移量:若所述比对长度小于或等于所述当前帧的数据偏移量,则删除从所述缓冲器中主数据的开始位置向后偏移所述比对长度的主数据,将所述下一帧设置为当前帧;若所述比对长度大于所述当前帧的数据偏移量,则计算所述比对长度与所述当前帧的数据偏移量的长度差,删除从所述缓冲器中主数据的开始位置向后偏移所述长度差的主数据。

8.如权利要求1所述的音频的解码方法,其特征在于,还包括,解码所述当前帧的解码用数据之后,删除所述缓冲器中的当前帧的解码用数据及其之前的主数据。

9.如权利要求8所述的音频的解码方法,其特征在于,所述删除所述缓冲器中的当前帧的解码用数据及其之前的主数据包括:将所述缓冲器中的主数据向前移动所述当前帧的解码用数据及其之前的主数据的长度。

10.如权利要求1所述的音频的解码方法,其特征在于,所述帧还包括该帧的错误检查码和该帧的边信息。

11.如权利要求10所述的音频的解码方法,其特征在于,所述帧的存储结构依次为该帧的同步数据、该帧的错误检查码、该帧的数据偏移量、该帧的边信息和主数据。

12.一种音频的解码装置,其特征在于,包括:

获取单元,用以获取音频码流中的帧,所述音频码流中的帧包括主数据、该帧的同步数据和该帧的数据偏移量,所述该帧的数据偏移量为该帧的解码用数据的起始位置相对于该帧的同步数据的偏移量;

处理单元,用以将当前帧内的主数据存入缓冲器中;

解码单元,用以基于所述缓冲器中的主数据的长度及下一帧的数据偏移量,确定并解码所述当前帧的解码用数据;所述解码单元包括差值单元和确定单元,所述差值单元用以将所述缓冲器中的主数据的长度与所述下一帧的数据偏移量做差获取所述当前帧的解码用数据的长度,所述确定单元用以确定所述当前帧的解码用数据的起始位置为所述缓冲器中主数据的开始位置,确定所述当前帧的解码用数据的终止位置为所述起始位置向后偏移所述解码用数据的长度。

13.如权利要求12所述的音频的解码装置,其特征在于,所述处理单元从所述缓冲器中的主数据的结束位置开始,存储所述当前帧内的主数据。

14.如权利要求12所述的音频的解码装置,其特征在于,还包括:删除单元,用以在所述解码单元解码所述当前帧的解码用数据后,删除所述缓冲器中的当前帧的解码用数据。

15.如权利要求14所述的音频的解码装置,其特征在于,所述删除单元将所述缓冲器中的主数据向前移动所述当前帧的解码用数据的长度。

16.如权利要求14所述的音频的解码装置,其特征在于,还包括:

第一比对单元,用以在所述处理单元将所述当前帧内的主数据存入所述缓冲器中之前,获取所述缓冲器中的主数据的长度并与所述当前帧的数据偏移量比对;

若所述第一比对单元比对所述缓冲器中的主数据的长度小于所述当前帧的数据偏移量,则所述处理单元将所述当前帧内的主数据存入所述缓冲器后将所述下一帧设置为当前帧;

若所述第一比对单元比对所述缓冲器中的主数据的长度大于所述当前帧的数据偏移量,则所述删除单元删除从所述缓冲器中的主数据的结束位置开始向前偏移所述当前帧的数据偏移量之前的主数据。

17.如权利要求14所述的音频的解码装置,其特征在于,还包括,第二比对单元,用以在所述处理单元将所述当前帧内的主数据存入所述缓冲器中之后,所述解码单元确定所述当前帧的解码用数据之前,比对所述缓冲器中的主数据的长度与所述下一帧的数据偏移量;

若所述第二比对单元比对所述缓冲器中的主数据的长度小于或等于所述下一帧的数据偏移量,则将所述下一帧设置为当前帧。

18.如权利要求14所述的音频的解码装置,其特征在于,还包括:

记录单元,用以在所述处理单元将所述当前帧内的主数据存入缓冲器中之前,记录所述缓冲器中的主数据的长度为比对长度;

第三比对单元,用以在所述处理单元将所述当前帧内的主数据存入缓冲器中之后,所述解码单元确定所述当前帧的解码用数据之前,比对所述缓冲器中的当前的主数据的长度与所述下一帧的数据偏移量;

若所述缓冲器中的当前的主数据的长度小于或等于所述下一帧的数据偏移量,则将所述下一帧设置为当前帧;若所述缓冲器中的当前的主数据的长度大于所述下一帧的数据偏移量,则所述第三比对单元还用以比对所述比对长度与所述当前帧的数据偏移量:若所述比对长度小于或等于所述当前帧的数据偏移量,则所述删除单元删除从所述缓冲器中主数据的开始位置向后偏移所述比对长度的主数据,将所述下一帧设置为当前帧;若所述比对长度大于所述当前帧的数据偏移量,则所述删除单元计算所述比对长度与所述当前帧的数据偏移量的长度差,删除从所述缓冲器中主数据的开始位置向后偏移所述长度差的主数据。

19.如权利要求12所述的音频的解码装置,其特征在于,还包括,删除单元用以在所述解码单元解码所述当前帧的解码用数据之后,删除所述缓冲器中的当前帧的解码用数据及其之前的主数据。

20.如权利要求19所述的音频的解码装置,其特征在于,所述删除单元将所述缓冲器中的主数据向前移动所述当前帧的解码用数据及其之前的主数据的长度。

21.如权利要求12所述的音频的解码装置,其特征在于,所述帧还包括该帧的错误检查码和该帧的边信息。

22.如权利要求21所述的音频的解码装置,其特征在于,所述帧的存储结构依次为该帧的同步数据、该帧的错误检查码、该帧的数据偏移量、该帧的边信息和主数据。

说明书 :

音频的解码方法及装置

技术领域

[0001] 本发明涉及音频的解码技术领域,尤其是一种音频的解码方法及装置。

背景技术

[0002] 目前音频的格式有许多种,例如,WAV、MIDI、WMA、MP3等格式,其中比较常用为MP3格式。无论何种格式的音频,在播放之前,都需要对音频进行编解码,才能得以播放。
[0003] 每一个MP3文件可以看成是一个音频码流,包括由多个媒体帧(简称帧)所构成的帧串,帧是MP3文件用来计算数据量的单位。每一帧存储一部分主数据(main data)以供解码使用。
[0004] 每一帧上存储的主数据的长度通常相等,且每一帧可以存储用以解码其他帧的主数据。也就是说,解码当前帧所用的主数据可以存储在其他帧中,通常情况下,存储在当前帧的上一帧或上两帧的主数据中。鉴于上述情况,解码所述当前帧时,需要确定解码所述当前帧所需要的主数据的开始位置(main_data_begin)。每一帧的所需要的主数据的开始位置通常会记录该帧中。目前解码音频码流时,根据每一帧中记录的该帧所需要的主数据的开始位置,判断是否需要将该帧包含的主数据存入缓冲器中。具体的解码技术可以参考公开号为US2004008975的美国专利申请。
[0005] 由于音频码流中包含的帧的数量通常比较多,且包含的帧,有的是正确合法的帧,有的是被破坏的帧,有的是不合法的帧,因此在解码所述音频码流时,不仅每一帧都要判断是否需要将该帧包含的主数据存入缓冲器中,而且还要将不合法的帧剔除,分析被破坏的帧的主数据是否可用。由于帧的数量较多,因此目前的解码技术效率较低。另外,由于帧被破坏的原因有许多种,分析被破坏的帧的主数据是否可用,难度较大且处理方法较为复杂,消耗的资源和成本也相应较大,若分析出错解码出的音频码流的质量不高,影响听觉。
[0006] 因此如何提高音频码流的解码效率,且降低解码的复杂度,提高解码质量成为目前亟待解决的问题之一。

发明内容

[0007] 本发明解决的问题是如何提高音频码流的解码效率,且降低解码的复杂度,提高解码质量。
[0008] 为解决上述问题,本发明的技术方案提供了一种音频的解码方法,包括:
[0009] 获取音频码流中的帧,所述音频码流中的帧包括主数据、该帧的同步数据和该帧的数据偏移量,所述该帧的数据偏移量为该帧的解码用数据的起始位置相对于该帧的同步数据的偏移量;
[0010] 将当前帧内的主数据存入缓冲器中;
[0011] 基于所述缓冲器中的主数据的长度及下一帧的数据偏移量,确定所述当前帧的解码用数据;
[0012] 解码所述当前帧的解码用数据。
[0013] 可选的,所述将当前帧内的主数据存入缓冲器中包括:
[0014] 从所述缓冲器中的主数据的结束位置开始,存储所述当前帧内的主数据。
[0015] 可选的,所述基于所述缓冲器中的主数据的长度及下一帧的数据偏移量,确定所述当前帧的解码用数据包括:
[0016] 将所述缓冲器中的主数据的长度与所述下一帧的数据偏移量做差获取所述当前帧的解码用数据的长度;
[0017] 确定所述当前帧的解码用数据的起始位置为所述缓冲器中主数据的开始位置,确定所述当前帧的解码用数据的终止位置为所述起始位置向后偏移所述解码用数据的长度。
[0018] 可选的,所述音频的解码方法还包括,解码所述当前帧的解码用数据之后,删除所述缓冲器中的当前帧的解码用数据。
[0019] 可选的,所述删除所述缓冲器中的当前帧的解码用数据包括:
[0020] 将所述缓冲器中的主数据向前移动所述当前帧的解码用数据的长度。
[0021] 可选的,在所述将当前帧内的主数据存入缓冲器中之前还包括:若所述缓冲器中的主数据的长度小于所述当前帧的数据偏移量,则将所述当前帧内的主数据存入所述缓冲器后将所述下一帧设置为当前帧;
[0022] 若所述缓冲器中的主数据的长度大于所述当前帧的数据偏移量,则删除从所述缓冲器中的主数据的结束位置开始向前偏移所述当前帧的数据偏移量之前的主数据。
[0023] 可选的,在所述将当前帧内的主数据存入缓冲器中之后,确定所述当前帧的解码用数据之前还包括:若所述缓冲器中的主数据的长度小于或等于所述下一帧的数据偏移量,则将所述下一帧设置为当前帧。
[0024] 可选的,在所述将当前帧内的主数据存入缓冲器中之前还包括:记录所述缓冲器中的主数据的长度为比对长度,在所述将当前帧内的主数据存入缓冲器中之后,确定所述当前帧的解码用数据之前还包括:若所述缓冲器中的当前的主数据的长度小于或等于所述下一帧的数据偏移量,则将所述下一帧设置为当前帧;若所述缓冲器中的当前的主数据的长度大于所述下一帧的数据偏移量,则比对所述比对长度与所述当前帧的数据偏移量:若所述比对长度小于或等于所述当前帧的数据偏移量,则删除从所述缓冲器中主数据的开始位置向后偏移所述比对长度的主数据,将所述下一帧设置为当前帧;若所述比对长度大于所述当前帧的数据偏移量,则计算所述比对长度与所述当前帧的数据偏移量的长度差,删除从所述缓冲器中主数据的开始位置向后偏移所述长度差的主数据。
[0025] 可选的,所述音频的解码方法还包括,解码所述当前帧的解码用数据之后,删除所述缓冲器中的当前帧的解码用数据及其之前的主数据。
[0026] 可选的,所述删除所述缓冲器中的当前帧的解码用数据及其之前的主数据包括:
[0027] 将所述缓冲器中的主数据向前移动所述当前帧的解码用数据及其之前的主数据的长度。
[0028] 可选的,所述帧还包括该帧的错误检查码和该帧的边信息。
[0029] 可选的,所述帧的存储结构依次为该帧的同步数据、该帧的错误检查码、该帧的数据偏移量、该帧的边信息和主数据。
[0030] 为解决上述问题,本发明的技术方案还提供了一种音频的解码装置,包括:
[0031] 获取单元,用以获取音频码流中的帧,所述音频码流中的帧包括主数据、该帧的同步数据和该帧的数据偏移量,所述该帧的数据偏移量为该帧的解码用数据的起始位置相对于该帧的同步数据的偏移量;
[0032] 处理单元,用以将当前帧内的主数据存入缓冲器中;
[0033] 解码单元,用以基于所述缓冲器中的主数据的长度及下一帧的数据偏移量,确定并解码所述当前帧的解码用数据。
[0034] 与现有技术相比,本发明具有以下优点:
[0035] 将每一帧的主数据都存入缓冲器中,节省判断的时间;由于每一帧的主数据都存入缓冲器中,基于当前帧和/或下一帧的数据偏移量在缓冲器中确定解码当前帧所需的解码用数据,可以准确的判断出解码当前帧所需的解码用数据,简化分析被破坏的帧的主数据是否可用这一步骤,降低了该步骤的复杂度,且提高了解码的质量;解码后删除当前帧的解码用数据,不仅降低了当前帧的解码用数据对后续的解码过程的影响,而且节约了缓冲器的存储空间,提高了缓冲器的复用率。
[0036] 在缓冲器中存入主数据时,从缓冲器中的主数据的结束位置后存储,保证缓冲器中的主数据是连续的,以便读取。
[0037] 解码后删除当前帧的解码用数据,具体实施时,可以是删除当前帧的解码用数据后,将缓冲器中剩余的主数据向前移动删除的当前帧的解码用数据的长度,保证每次从缓冲器的开始位置获取主数据,以便正确快速的计算出每一帧的解码用数据。
[0038] 将当前帧内的主数据存入缓冲器之前,基于缓冲器中的主数据的长度和当前帧的数据偏移量判断该帧是否为被破坏的帧,并删除多余的主数据,若该帧为被破坏的帧,则仅将其主数据存入缓冲器,进入下一帧的解码,若为合法正确的帧则继续后续的步骤。这不仅简化了判断帧是否为被破坏的帧的步骤,而且删除多余的主数据防止对后续解码的影响,将被破坏的帧的主数据存入缓冲器,还防止主数据的丢失。
[0039] 在所述将当前帧内的主数据存入缓冲器中之后,确定所述当前帧的解码用数据之前,基于缓冲器中的主数据的长度和下一帧的数据偏移量判断当前帧是否具有解码用数据,若具有解码用数据则进行后续的步骤,若解码用数据有误,则停止当前帧的解码,进行下一帧的解码。这不仅提高了解码的效率,而且提高了解码质量,防止误解码以及解错码。

附图说明

[0040] 图1是本发明实施例提供的音频的解码方法的流程图;
[0041] 图2为MP3播放器读取MP3文件的示意图;
[0042] 图3是本发明实施例提供的帧的结构示意图;
[0043] 图4是本发明实施例一提供的MP3音频码流解码的流程图
[0044] 图5是本发明实施例二提供的MP3音频码流解码的流程图;
[0045] 图6是本发明实施例三提供的MP3音频码流解码的流程图;
[0046] 图7是本发明实施例四提供的MP3音频码流解码的流程图;
[0047] 图8是本发明实施例提供的MP3文件的片段;
[0048] 图9是如图4所示的流程图进行MP3音频码流解码过程中缓冲器中主数据的示意图;
[0049] 图10是本发明实施例提供的音频的解码装置的结构图。

具体实施方式

[0050] 为使本发明的上述目的、特征和优点能够更为明显易懂,下面结合附图对本发明的具体实施方式做详细的说明。
[0051] 在以下描述中阐述了具体细节以便于充分理解本发明。但是本发明能够以多种不同于在此描述的其它方式来实施,本领域技术人员可以在不违背本发明内涵的情况下做类似推广。因此本发明不受下面公开的具体实施方式的限制。
[0052] 图1是本发明实施例提供的音频的解码方法的流程图,下面结合图1详细说明。
[0053] 所述音频的解码方法包括:
[0054] 步骤S1,获取音频码流中的帧,所述音频码流中的帧包括主数据、该帧的同步数据和该帧的数据偏移量,所述该帧的数据偏移量为该帧的解码用数据的起始位置相对于该帧的同步数据的偏移量;
[0055] 步骤S2,将当前帧内的主数据存入缓冲器中;
[0056] 步骤S3,基于缓冲器中的主数据的长度及下一帧的数据偏移量,确定所述当前帧的解码用数据;
[0057] 步骤S4,解码所述当前帧的解码用数据。
[0058] 所述步骤S1中,所述音频码流(例如,MP3音频码流)中通常包括帧(也称为音频帧),每一帧的存储结构通常是固定的,帧的存储结构一般为:该帧的同步数据(也称为同步头、同步信息)、该帧的错误检查码、该帧的数据偏移量(main_data_begin)、该帧的边信息和主数据(main data)。该帧的数据偏移量(main_data_begin)、该帧的边信息和主数据(main data)也合称为该帧的取样数据。
[0059] 根据编码方式的不同,编码之后的音频码流中帧的存储结构可能略有不同,例如,编码之后的音频码流中未包含错误检查码和边信息等。帧的存储结构以实际解码的音频码流中帧的存储结构为准,不限于上述内容。
[0060] 帧的同步数据通常包括固定长度(通常为32比特)的比特串和同步字(通常为12比特),记录了帧的信息,用以检测该帧是否为音频码流的帧,也就是说用以检测该帧是否合法。帧的错误检查码通常是固定数值的比特串(通常为16比特),用来作为检测错误之用。
[0061] 帧的主数据(main data)是供帧的解码所用的,帧的解码用数据存储在帧的主数据中。由于编码方式的不同,同一音频码流中每一帧的解码用数据的长度可以不等长,由于每一帧中存储主数据的长度是固定的,因此为提高空间的存储率,每一帧的解码用数据可以存储在其他帧的主数据中。具体的,每一帧的主数据中可以包含该帧的全部或部分解码用数据,该帧的下一帧的全部或部分解码用数据、该帧的下两帧的全部或部分解码用数据中的一种或几种的组合。
[0062] 该帧的数据偏移量(main_data_begin)表示该帧的解码用数据的起始位置相对于该帧的同步数据的偏移量,用以计算该帧的解码用数据的起始位置。由于帧的解码用数据通常存储在本帧或者该帧的前一帧或前两帧的主数据中,因此所述数据偏移量通常是该帧的解码用数据的起始位置相对于该帧的同步数据向前偏移的长度(也称为负偏移)。根据所述数据偏移量可以确定该帧的解码用数据的起始位置。若该帧的解码用数据全部存储在该帧的主数据中,则该帧的数据偏移量为0。音频码流的第一帧的数据偏移量为0。
[0063] 该帧的边信息包括一些解码时所应用到的算法的参数数据,解析所述边信息获取其中的参数数据,依据该参数数据及该帧的解码用数据进行该帧的解码。
[0064] 所述步骤S2中,在解码过程中,需要单独开辟一块空间作为缓冲器,用以存储帧的主数据(将帧的主数据拷贝到所述缓冲器中),实现帧与帧的主数据的拼接。解码所述音频码流时,从所述缓冲器中获取需要的主数据(帧的解码用数据)进行解码。
[0065] 目前解码音频码流时,根据当前帧的数据偏移量判断是否将当前帧内的主数据拷贝到所述缓冲器中。若当前帧的数据偏移量为0,表示当前帧的解码用数据仅存储在当前帧的主数据中,则从当前帧内的主数据中获取当前帧的解码用数据;若当前帧的数据偏移量非0(通常大于0),表示当前帧的解码用数据至少有一部分存储在当前帧的前一帧或前两帧的主数据中,则将当前帧内的主数据拷贝到所述缓冲器中,解码时从缓冲器中获取当前帧的解码用数据。
[0066] 由于帧的主数据有的拷贝到缓冲器中,有的未拷贝到缓冲器中,因此解码音频码流时,容易出现解码用数据获取错误的情况,并且获取解码用数据时,需要从帧中获取一部分,从缓冲器中获取一部分。这种方式一方面解码的质量不高,另一方面效率较低。
[0067] 所述步骤S2中,不考虑帧的数据偏移量,将每一帧内的主数据都拷贝到缓冲器中,解码时,从缓冲器中获取解码用数据。这不仅节省了判断是否需要拷贝当前帧内的主数据的时间,提高了效率,而且所有的解码用数据从缓冲器中获取,减小数据获取错误的几率,也进一步地提高了效率。
[0068] 拷贝主数据时,从所述缓冲器中的主数据的结束位置开始,存储所述当前帧内的主数据。这保证缓冲器中的主数据是连续的,以便读取。
[0069] 所述步骤S3中,基于缓冲器中的主数据的长度及下一帧的数据偏移量,确定所述当前帧的解码用数据,具体实施时可以是:
[0070] 将所述缓冲器中的主数据的长度与所述下一帧的数据偏移量做差获取所述当前帧的解码用数据的长度;
[0071] 确定所述当前帧的解码用数据的起始位置为所述缓冲器中主数据的开始位置,确定所述当前帧的解码用数据的终止位置为所述起始位置向后偏移所述解码用数据的长度。
[0072] 所述确定所述当前帧的解码用数据通常指的是确定所述解码用数据的位置。
[0073] 所述步骤S4中,解码所述当前帧的解码用数据后,还可以删除所述缓冲器中的当前帧的解码用数据或者删除所述缓冲器中的当前帧的解码用数据及其之前的主数据。具体实施时,可以是删除所述解码用数据时,将所述缓冲器中的主数据向前移动所述当前帧的解码用数据的长度或者将所述缓冲器中的主数据向前移动所述当前帧的解码用数据及其之前的主数据的长度。
[0074] 这样保证在执行所述步骤S2时,从所述缓冲器中主数据的开始位置向后偏移所述当前帧的数据偏移量对应的位置开始,顺序存储当前帧内的主数据,也就是从所述缓冲器的开始位置向后偏移所述当前帧的数据偏移量对应的位置开始。执行所述步骤S3时,计算缓冲器中的主数据长度时,从缓冲器的开始位置起计算,计算当前帧的解码用数据的长度时,所述当前帧的解码用数据的起始位置为所述缓冲器中主数据的开始位置。
[0075] 另外,删除所述当前帧的解码用数据还可以节省缓冲器的空间,提高缓冲器的复用率。
[0076] 所述步骤S2-S4可以看成是一个总的步骤:解码当前帧,解码当前帧这一过程中包含所述步骤S2-S4。执行所述步骤S4时,解码所述当前帧的解码用数据后或者删除所述当前帧的解码用数据后,将下一帧设置为当前帧,重复上述解码当前帧的步骤(S2-S4)。
[0077] 由于音频码流解码过程中,经常会出现被破坏的帧。现有技术中,有的帧的主数据拷贝到缓冲器中,有的帧的主数据未拷贝到主数据中,当音频码流中出现被破坏的帧时,较难判断被破坏的帧中是否存在其下一帧或下两帧的解码用数据,因此按照图1所示的流程图解码时,还可以增加以下两个步骤,处理音频码流中被破坏的帧。
[0078] 执行所述步骤S2将当前帧内的主数据存入缓冲器中之前,执行步骤S5(图中未显示),比对缓冲器中的主数据长度与当前帧的数据偏移量,若所述缓冲器中的主数据的长度小于所述当前帧的数据偏移量,表示当前帧为被破坏的帧,则将所述当前帧中包含的主数据存入缓冲器后将下一帧设置为当前帧;若所述缓冲器中的主数据的长度大于所述当前帧的数据偏移量,则删除从所述缓冲器中的主数据的结束位置开始向前偏移所述当前帧的数据偏移量之前的主数据,以保证所述当前帧的解码用数据的起始位置为所述缓冲器中主数据的开始位置;若所述缓冲器中的主数据的长度等于所述当前帧的数据偏移量,则从缓冲器的开始位置起,计算当前帧的解码用数据,并进行后续的步骤。
[0079] 执行所述步骤S2将当前帧内的主数据存入缓冲器中之后,所述步骤S3确定所述当前帧的解码用数据之前,执行步骤S6(图中未显示),比对缓冲器中主数据的长度与下一帧的数据偏移量,若所述缓冲器中的主数据的长度小于或等于下一帧的数据偏移量,表示当前帧为被破坏的帧,则将下一帧设置为当前帧;若所述缓冲器中的主数据的长度大于下一帧的数据偏移量,则继续执行后续的步骤。
[0080] 在其他实施中,还可以采用以下方式,处理音频码流中被破坏的帧:执行所述步骤S2将当前帧内的主数据存入缓冲器中之前,记录所述缓冲器中的主数据的长度为比对长度,执行所述步骤S2将当前帧内的主数据存入缓冲器中之后,执行所述步骤S3确定所述当前帧的解码用数据之前,若所述缓冲器中的当前的主数据的长度小于或等于所述下一帧的数据偏移量,则将所述下一帧设置为当前帧;若所述缓冲器中的当前的主数据的长度大于所述下一帧的数据偏移量,则比对所述比对长度与所述当前帧的数据偏移量:若所述比对长度小于或等于所述当前帧的数据偏移量,则删除从所述缓冲器中主数据的开始位置向后偏移所述比对长度的主数据,将所述下一帧设置为当前帧;若所述比对长度大于所述当前帧的数据偏移量,则计算所述比对长度与所述当前帧的数据偏移量的长度差,删除从所述缓冲器中主数据的开始位置向后偏移所述长度差的主数据。
[0081] 下面以一个具体的实例说明所述音频的解码方法。
[0082] 图2为MP3播放器读取MP3文件的示意图,图3是本发明实施例提供的帧的结构示意图,图4是本发明实施例提供的MP3音频码流解码的流程图,下面结合图1至图4详细说明。
[0083] 动态影像压缩标准音频层III(Motion Picture Experts Group Layer III Audio,MP3)是符合国际标准化组织及国际电子技术协会(International Organization for Standardization and International Electrotechnical Commission,ISO/IEC)的高音质且高解码效能(组译效能)的一种音频标准。
[0084] 参考图2,图2为MP3播放器10读取MP3文件的示意图。MP3文件是存储于光盘驱动器上的光盘中(也可以在闪存、硬盘等存储介质中),而MP3播放器10包括一个语法分析器(parser)101、输入缓冲器(input buffer)102、MP3解码器(decoder)103。其中,MP3解码器103用来解码经由光盘驱动器、语法分析器101及输入缓冲器102所传送过来的MP3文件中的帧(frames)。
[0085] 请参考图3,具体的,图3为MP3文件的帧的结构图。每一个MP3文件包括由多个帧(也称为音频帧)所构成的帧串,帧是MP3文件用来计算数据量的单位。每一帧存储一部分主数据(main data)以供解码使用。
[0086] 以图3中帧7为例,帧7包括帧头71、错误检查码72、取样数据73以及附加数据74(根据MP3文件的制作方法,可选择是否要制作附加数据74)。
[0087] 帧头71是32比特(bits)长度的比特串,并包括12比特长度的同步字711。此外,帧头71的32比特中,2比特用来记录取样频率,其中4比特用来记录压缩比率,而其它比特则记录一些相关信息。并非每种MP3文件都包括错误检查码72,MP3文件制作者在制作MP3文件时,可选择是否要使MP3文件内附有错误检查码72,而错误检查码72是16比特的比特串,用来作为检测错误之用。
[0088] 取样数据73包括了解码此帧7的音频取样时所必须的一些数据,而附加数据74则包括一些其它与音频数据无关的数据。取样数据73包括main_data_begin区域731(数据偏移量)、audio_data区域732(边信息)以及main data区域733(主数据),其中main_data_begin区域731的作用将在下面说明,audio_data区域732是用来存储一些解码时所应用到的算法的参数数据,而main data区域733包括一些经过编码的音频取样数据(解码帧的解码用数据包含在音频取样数据中)。此外,audio_data区域732以及main data区域733所存储的数据量可能会因对应于不同的帧而有所变化。
[0089] 需特别说明的是,并非每种音频在被压缩之后都需相同大小的空间来存储。例如,在相同时间间隔内压缩在安静环境下所录制的音源而产生的文件大小会比压缩管弦乐的音源而产生的文件小很多。因此,当编码MP3的音乐时,MP3的标准允许main data区域733的溢出值记录到帧7上游其它帧中所未使用到的数据存储空间(即帧7的解码用数据可以保存在帧6和帧5的main data区域中),以完整地使用到全部的音频。
[0090] 举例来说,main data区域733实际的数据容量大小为100字节(bytes),而解码帧7时所需的总音频取样是203字节(也称为解码用数据),因此会有103字节的数据存锗至位于帧7上游其它帧中的main data区域(如帧6的main data区域),然而假使帧6的main data区域的剩余空间仍不足以存储这103字节的数据,则其它所剩下的尚未存储的字节将会存储至帧5的main data区域中。此外,帧7的main_data_begin区域731会记录一个数值为103的数据(数据偏移量),以标示出帧7的溢出值的大小(103字节,表示在帧头71之前还存储有103个字节的帧7的解码用数据)。此外,若帧6的main data区域的大小只有70个字节,则表示还另有33个字节大小的溢出值,而这33个字节大小的溢出值会被再度存储至帧5的main data区域中。
[0091] 此外,为避免MP3文件出错,依据MP3的标准,凡MP3文件的第一个帧(如图3中的帧1)其main_data_begin区域所记录的值必须为零。为正确地解码MP3文件的帧,MP3解码器有时会需要一些位于上游的帧的数据来解码特定的帧,因此,MP3解码器通常会预先读取MP3文件的第一个帧的数据以开始解码。然而,在某些播放模式下(例如:循环播放模式、倒带播放模式),语法分析器101会无法从第一个帧开始提供数据给MP3解码器以进行解码,且在某些情形下,MP3文件会受到破坏而使得main_data_begin区域无法存储正确的数据,上述的这些情况都会使得MP3解码器无法顺利地读取第一个帧。然而,一旦MP3解码器忽略main_data_begin区域所记录的数据而直接将帧解码,会使得MP3解码器无法完全正确地解码并使得刚开始所播放出来的音效出现爆音。
[0092] 在MP3解码的过程中,通常会使用到比特池技术。具体的:
[0093] 由于MP3采用了自适应窗口选择技术,这样在采用短窗时就会需要较多的编码比特。另一方面,在一些静音帧中,所需的比特数要小于一般的帧。这就会带来编码输出比特率不恒定的情况。
[0094] 为了保持速率的恒定,在MP1和MP2中,针对所需比特数少于给定比特数的情况,采用了插入冗余比特的方法。由于没有采用自适应窗口选择技术,这两层不会出现所需比特数多于给定比特数的情况。
[0095] 在MP3中,保持比特率恒定的办法就是将某些帧(如静音帧)中多出来的比特保留下来,留给后面的帧使用。在每帧量化编码前,先根据信号的感觉熵(PE)预测其所需的比特数,若PE较大,即所需比特数较多,则从前面预留的比特中取出适当的比特加到可用的比特中。
[0096] 采用了弹性比特存储技术之后,MP3的帧结构就不同于一般数据流的帧结构了。在一般的帧中,每帧的数据都是紧接在帧同步码(即同步头,也称同步信息或同步数据)之后,而MP3帧的主数据(即解码用数据)则有可能先于该帧的同步码出现。为了准确定位每帧的主数据,MP3在码流中设置了一个9比特的指针(即数据偏移量),用于指出主数据起始位置相对于帧同步码所超前的字节数。MP3帧结构如图3所示。
[0097] 由图3可见,弹性比特存储技术(比特池技术)实际上就是在每帧的主数据(图3所示的帧的main data)中以固定的间隔插入同步码(即同步数据)和边信息,从而以固定比特率的格式实现了可变比特率的编码。在MP3的解码过程中,单独开辟一个缓冲器,将帧内的主数据存在缓冲器内,实现帧与帧的主数据的连接,再进行解码。
[0098] 图4是本发明实施例一提供的MP3音频码流解码的流程图,MP3音频码流解码的具体流程为:
[0099] 执行步骤S1,获取音频码流中的帧;所述音频码流中的帧包括主数据(图3中所示的main data区域中存储的数据)、该帧的同步数据(图3中所示的帧头)和该帧的数据偏移量(图3中所示的main_data_begin),所述该帧的数据偏移量为该帧的解码用数据的起始位置相对于该帧的同步数据的偏移量;
[0100] MP3文件中除了包含该MP3的帧(音频帧)还会包含其他一些垃圾帧(MP3中废弃不可用的帧),执行步骤S1时,通常根据同步数据确定该帧是否为MP3的音频帧(该帧是否为合法的),并且是一帧一帧的判断当前帧是否为MP3的音频帧;由于MP3是一帧一帧进行解码的,因此一帧解码完成之后,重新执行S1,获取下一帧(即新的当前帧),步骤S1每次获取的是当前帧的数据;
[0101] 执行步骤S1之后,执行步骤S11,判断缓冲器中的主数据的长度是否小于当前帧的数据偏移量;
[0102] 具体实施时,可以是比对缓冲器中的主数据长度与当前帧的数据偏移量,若所述缓冲器中的主数据的长度小于所述当前帧的数据偏移量,表示当前帧为被破坏的帧,则执行步骤S13,将当前帧中包含的主数据存入缓冲器后,停止当前帧的解码,将下一帧设置为新的当前帧,也就是将所述当前帧中包含的主数据存入缓冲器后将下一帧设置为当前帧;然后重新执行步骤S1,获取新的当前帧的数据;
[0103] 若所述缓冲器中的主数据的长度大于所述当前帧的数据偏移量,则执行步骤S12,删除从缓冲器中的主数据的结束位置开始向前偏移当前帧的数据偏移量之前的主数据,即删除冗余数据,删除冗余数据包括将冗余数据后面的剩余的主数据向前偏移,使得剩余的主数据存储的起始位置为缓冲器的开始位置,以保证所述当前帧的解码用数据的起始位置为所述缓冲器中主数据的开始位置;然后执行步骤S2,将当前帧内的主数据存入缓冲器中,可选的,从所述缓冲器中的主数据的结束位置开始,存储所述当前帧内的主数据;
[0104] 若所述缓冲器中的主数据的长度等于所述当前帧的数据偏移量,则直接进行步骤S2,将当前帧内的主数据存入缓冲器中,可选的,从所述缓冲器中的主数据的结束位置开始,存储所述当前帧内的主数据;
[0105] 执行步骤S2后,执行步骤S21,判断缓冲器中的主数据的长度是否小于下一帧的数据偏移量,此时缓冲器中的主数据的长度为执行完步骤S2将当前帧内的主数据存入缓冲器中之后,缓冲器中的主数据的长度;
[0106] 若所述缓冲器中的主数据的长度小于或等于下一帧的数据偏移量,表示当前帧为被破坏的帧,当前帧已没有解码的必要,则执行步骤S22,将下一帧设置为新的当前帧,然后重新执行步骤S1,获取新的当前帧的数据;
[0107] 若所述缓冲器中的主数据的长度大于下一帧的数据偏移量,则继续执行步骤S3,基于缓冲器中的主数据的长度及下一帧的数据偏移量,确定所述当前帧的解码用数据;
[0108] 具体实施时,可以是将所述缓冲器中的主数据的长度与所述下一帧的数据偏移量做差获取所述当前帧的解码用数据的长度;确定所述当前帧的解码用数据的起始位置为所述缓冲器中主数据的开始位置,确定所述当前帧的解码用数据的终止位置为所述起始位置向后偏移所述解码用数据的长度;
[0109] 执行步骤S3之后,执行步骤S40,解码所述当前帧的解码用数据,然后删除所述缓冲器中的当前帧的解码用数据;具体实施时,可以是将所述缓冲器中的主数据向前移动所述当前帧的解码用数据的长度。
[0110] 图5是本发明实施例二提供的MP3音频码流解码的流程图,图5与图4所示的流程图的区别在于,图5所示的流程图中省略了步骤S12,执行步骤S11后,若缓冲器中的主数据的长度大于当前帧的数据偏移量,则直接进行步骤S2;图5与图4所示的流程图的区别还在于,图5所示的流程图中,在执行步骤S41时,解码当前帧的解码用数据后,除了删除当前帧的解码用数据,还删除了缓冲器中当前帧的解码用数据之前的主数据。
[0111] 图4所示的流程图保证每次确定当前帧的解码用数据时,从缓冲器中主数据的开始位置起计算,方便当前帧的解码用数据的确定;图5所示的流程图将图4中的步骤S21与步骤S40合并,一次性删除缓冲器中的冗余的主数据。两种实施方式各有优势,在实际操作过程中,可以根据实际需要选择合适的实施方式。
[0112] 图6是本发明实施例三提供的MP3音频码流解码的流程图,下面结合图6详细说明。
[0113] 执行步骤S1,获取音频码流中的帧;此步骤与图4、图5中所示的步骤S1相同,此处不再赘述;
[0114] 执行步骤S1之后,执行步骤S211,记录缓冲器中的主数据的长度为比对长度;具体实施时,可以是记录当前缓冲器中主数据的开始位置到结束位置的长度为比对长度;
[0115] 然后执行步骤S2,将当前帧内的主数据存入缓冲器中,可选的,从所述缓冲器中的主数据的结束位置开始,存储所述当前帧内的主数据;
[0116] 执行步骤S2后,执行步骤S212,判断缓冲器中的主数据的长度是否小于下一帧的数据偏移量,此时缓冲器中的主数据的长度为执行完步骤S2将当前帧内的主数据存入缓冲器中之后,缓冲器中的主数据的长度;
[0117] 若所述缓冲器中的主数据的长度小于或等于下一帧的数据偏移量,表示当前帧为被破坏的帧,当前帧已没有解码的必要,则执行步骤S213,停止当前帧的解码,将下一帧设置为新的当前帧,然后重新执行步骤S1,获取新的当前帧的数据;
[0118] 若所述缓冲器中的主数据的长度大于下一帧的数据偏移量,则执行步骤S214,判断比对长度是否小于当前帧的数据偏移量,若对比长度小于或等于当前帧的数据偏移量,则执行步骤S215,删除从所述缓冲器中主数据的开始位置向后偏移所述比对长度的主数据,将所述下一帧设置为当前帧;若比对长度大于当前帧的数据偏移量,则执行步骤S216,计算所述比对长度与所述当前帧的数据偏移量的长度差,删除从所述缓冲器中主数据的开始位置向后偏移所述长度差的主数据,具体实施过程中,第一帧可以跳过步骤S214,直接进行步骤S216;
[0119] 执行步骤S216之后,执行步骤S3,基于缓冲器中的主数据的长度及下一帧的数据偏移量,确定所述当前帧的解码用数据;
[0120] 执行步骤S3之后,执行步骤S40,解码所述当前帧的解码用数据,然后删除所述缓冲器中的当前帧的解码用数据。
[0121] 图7是本发明实施例四提供的MP3音频码流解码的流程图,下面结合图7和图6详细说明。
[0122] 图7与图6所示的流程图的区别在于,图5所示的流程图在执行步骤S214后,若比对长度小于或等于当前帧的数据偏移量,则进行步骤S213,若比对长度大于当前帧的数据偏移量,则执行步骤S31,基于缓冲器中的主数据的长度、比对长度、当前帧的数据偏移量及下一帧的数据偏移量,确定所述当前帧的解码用数据;执行步骤S31之后,执行步骤S43,解码所述当前帧的解码用数据,然后删除所述缓冲器中的当前帧的解码用数据及所述解码用数据之前的主数据。
[0123] 图6所示的流程图保证每次确定当前帧的解码用数据时,从缓冲器中主数据的开始位置起计算,方便当前帧的解码用数据的确定;图7所示的流程图,在解码当前帧的解码用数据之后,一次性删除缓冲器中的冗余的主数据。两种实施方式各有优势,在实际操作过程中,可以根据实际需要选择合适的实施方式。
[0124] 图8是本发明实施例提供的MP3文件的片段,图8中所示的是MP3文件的前五帧的结构图,依次为第一帧、第二帧、第三帧、第四帧和第五帧,每一帧的存储结构为同步数据(帧头)、错误检验码、数据偏移量、边信息和主数据。具体的第一帧的数据偏移量为0,第一帧的主数据D1包含第一帧的全部解码用数据d11,第二帧的全部解码用数据d21,第三帧的部分解码用数据d31-d32;第二帧的数据偏移量为3,第二帧的主数据D2包括第三帧的部分解码用数据d33-d36;第三帧的数据偏移量为8,第三帧的主数据D3包括第三帧的部分解码用数据d37,第四帧的部分解码用数据d41-d43;第四帧的数据偏移量为3,第四帧的主数据D4包括第四帧的部分解码用数据d44,第五帧的部分解码用数据d51-d53;第五帧的数据偏移量为3,第五帧的主数据D5包括第五帧的部分解码用数据d54-d57。
[0125] 图9是如图4所示的流程图进行MP3音频码流解码过程中缓冲器中主数据的示意图,下面结合图4、图8和图9详细说明。
[0126] 执行步骤S1,获取第一帧(当前帧),然后执行步骤S11,解码第一帧时,缓冲器中的主数据的长度为0,第一帧的数据偏移量为0,因此执行步骤S2,从缓冲器的开始位置(0),也为缓冲器中主数据的结束位置,顺序存入第一帧的主数据D1(依次为d11,d21,d31,d32),参看图9第一帧对应的处理当前帧前对应的缓冲器中主数据的A1,然后执行步骤S21,此时缓冲器中主数据的长度为4,第二帧(下一帧)的数据偏移量为3,执行步骤S3,基于缓冲器中的主数据的长度及下一帧的数据偏移量,确定所述当前帧的解码用数据,具体的,缓冲器中主数据的长度为4减去第二帧(下一帧)的数据偏移量为3等于1,则第一帧(当前帧)的解码用数据的长度为1,述缓冲器中主数据的开始位置(0)向后偏移所述解码用数据的长度(1)即d11为第一帧(当前帧)的解码用数据,然后执行步骤S40,解码第一帧(当前帧)的解码用数据d11,然后删除所述缓冲器中的第一帧(当前帧)的解码用数据d11,并设置第二帧(下一帧)为新的当前帧;具体的,所述删除第一帧(当前帧)的解码用数据d11包括将剩余的主数据d21,d31,d32向前偏移一个位置(删除d11后空出的位置),即从缓冲器的开始位置重新依次存储剩余的主数据d21,d31,d32,参看图9第一帧对应的处理当前帧后对应的缓冲器中主数据的A2,此时缓冲器中主数据的长度为3,当前帧为第二帧;
[0127] 重新执步骤S1,获取第二帧(当前帧),然后执行步骤S11,解码第二帧时,缓冲器中的主数据的长度为3,第二帧的数据偏移量为3,因此执行步骤S2,从缓冲器中主数据的结束位置(3)存入第二帧的主数据D2(依次为d33,d34,d35,d36),此时缓冲器中主数据的长度为7,主数据依次为:d21,d31,d32,d33,d34,d35,d36,参看图9第二帧对应的处理当前帧前对应的缓冲器中主数据的A3;然后执行步骤S21,此时缓冲器中主数据的长度为7,第三帧(下一帧)的数据偏移量为8,执行步骤S22,将第三帧(下一帧)设置为新的当前帧,此时缓冲器中的主数据依次为:d21,d31,d32,d33,d34,d35,d36,参看图9第二帧对应的处理当前帧后对应的缓冲器中主数据的A4,长度为7,新的当前帧为第三帧;
[0128] 重新执行步骤S1,获取第三帧(当前帧),然后执行步骤S11,解码第三帧时,缓冲器中的主数据的长度为7,参看图9第三帧对应的处理当前帧前对应的缓冲器中主数据的A5,第三帧的数据偏移量为8,因此执行步骤S13,将第三帧(当前帧)中包含的主数据D3,从缓冲器的结束位置(7)依次存入主数据D3,此时缓冲器中包含的主数据依次为:d21,d31,d32,d33,d34,d35,d36,d37,d41,d42,d43,参看图9第三帧对应的处理当前帧后对应的缓冲器中主数据的A6,停止第三帧(当前帧)的解码,将第四帧(下一帧)设置为新的当前帧;
[0129] 重新执步骤S1,获取第四帧(当前帧),然后执行步骤S11,解码第四帧时,缓冲器中的主数据的长度为11,第四帧的数据偏移量为3,因此执行步骤S12,删除从缓冲器中的主数据的结束位置(11)开始向前偏移第四帧(当前帧)的数据偏移量(3)之前的主数据(d21,d31,d32,d33,d34,d35,d36,d37),剩余的主数据(d41,d42,d43)向前偏移删除的主数据的长度,即从缓冲器的开始位置(0)开始依次顺序存储剩余的主数据(d41,d42,d43),然后执行步骤S2,从缓冲器中主数据的结束位置(3)顺序存入第四帧的主数据D4(依次为d44,d51,d52,d53),参看图9第四帧对应的处理当前帧前对应的缓冲器中主数据的A7,然后执行步骤S21,此时缓冲器中主数据的长度为7,第五帧(下一帧)的数据偏移量为3,执行步骤S3,基于缓冲器中的主数据的长度及下一帧的数据偏移量,确定所述当前帧的解码用数据,具体的,缓冲器中主数据的长度为7减去第五帧(下一帧)的数据偏移量为3等于4,则第四帧(当前帧)的解码用数据的长度为4,所述缓冲器中主数据的开始位置(0)向后偏移所述解码用数据的长度(4)即d41-d44为第四帧(当前帧)的解码用数据,然后执行步骤S40,解码第四帧(当前帧)的解码用数据d41-d44,然后删除所述缓冲器中的第四帧(当前帧)的解码用数据d41-d44,并设置第五帧(下一帧)为新的当前帧;具体的,删除第四帧(当前帧)的解码用数据d41-d44包括将剩余的主数据d51-d53向前偏移四个位置(删除d41-d44后空出的位置),即从缓冲器的开始位置(0)重新依次存储剩余的主数据d51,d52,d53,参看图8第四帧对应的处理当前帧后对应的缓冲器中主数据的A8,此时缓冲器中主数据的长度为3,当前帧为第五帧;重新执行步骤S1,解码第五帧,此时缓冲器中的主数据参看图9第五帧对应的处理当前帧前对应的缓冲器中主数据的A9,第五帧的解码步骤与第一帧的相同,此处不再赘述。
[0130] 图10是本发明实施例提供的音频的解码装置的结构图,下面结合图10详细说明。所述音频的解码装置包括:
[0131] 获取单元1,用以获取音频码流中的帧,所述音频码流中的帧包括主数据、该帧的同步数据和该帧的数据偏移量,所述该帧的数据偏移量为该帧的解码用数据的起始位置相对于该帧的同步数据的偏移量;
[0132] 处理单元2,用以将当前帧内的主数据存入缓冲器中;处理单元2与获取单元1相连,从获取单元1获取当前帧内的主数据存入缓冲器中;
[0133] 解码单元3,用以基于所述缓冲器中的主数据的长度及下一帧的数据偏移量,确定并解码所述当前帧的解码用数据;解码单元3与获取单元1相连,从获取单元1获取下一帧的数据偏移量。
[0134] 所述音频的解码装置还包括:
[0135] 删除单元4,用以在解码单元3解码所述当前帧的解码用数据后,删除所述缓冲器中的当前帧的解码用数据,具体的可以是删除单元4将所述缓冲器中的主数据向前移动所述当前帧的解码用数据的长度;与解码单元3相连,监控解码单元3是否完成当前帧的解码。
[0136] 具体的,处理单元2从所述缓冲器中的主数据的结束位置开始,存储所述当前帧内的主数据。删除单元4将所述缓冲器中的主数据向前移动所述当前帧的解码用数据的长度。这可以保证处理单元2从所述缓冲器中的主数据的结束位置开始,存储所述当前帧内的主数据。
[0137] 具体实施时,解码单元3可以包括:
[0138] 差值单元,用以将所述缓冲器中的主数据的长度与所述下一帧的数据偏移量做差获取所述当前帧的解码用数据的长度;
[0139] 确定单元,用以确定所述当前帧的解码用数据的起始位置为所述缓冲器中主数据的开始位置,确定所述当前帧的解码用数据的终止位置为所述起始位置向后偏移所述解码用数据的长度。
[0140] 所述音频解码装置还可以包括:
[0141] 第一比对单元(图中未显示),用以在所述处理单元2将所述当前帧内的主数据存入所述缓冲器中之前,获取所述缓冲器中的主数据的长度并与所述当前帧的数据偏移量比对;所述第一比对单元与获取单元1,处理单元2和删除单元4相连;
[0142] 若所述第一比对单元比对所述缓冲器中的主数据的长度小于所述当前帧的数据偏移量,则所述处理单元2将所述当前帧内的主数据存入所述缓冲器后将所述下一帧设置为当前帧;若所述第一比对单元比对所述缓冲器中的主数据的长度大于所述当前帧的数据偏移量,则所述删除单元4删除从所述缓冲器中的主数据的结束位置开始向前偏移所述当前帧的数据偏移量之前的主数据;若所述第一比对单元比对所述缓冲器中的主数据的长度大于所述当前帧的数据偏移量,则删除单元4删除从所述缓冲器中的主数据的结束位置开始向前偏移所述当前帧的数据偏移量之前的主数据,以保证所述当前帧的解码用数据的起始位置为所述缓冲器中主数据的开始位置;若所述第一比对单元比对所述缓冲器中的主数据的长度等于所述当前帧的数据偏移量,则解码单元3和删除单元4进行后续的操作;
[0143] 第二比对单元(图中未显示),用以在所述处理单元2将当前帧内的主数据存入缓冲器中之后,所述解码单元3确定所述当前帧的解码用数据之前,比对所述缓冲器中的主数据的长度与下一帧的数据偏移量;所述第二比对单元与获取单元1相连,若所述第二比对单元比对所述缓冲器中的主数据的长度小于下一帧的数据偏移量,则将下一帧设置为当前帧;若所述第二比对单元比对所述缓冲器中的主数据的长度大于或等于下一帧的数据偏移量,则解码单元3和删除单元4进行后续的操作。
[0144] 在其他实施例中,删除单元4还可以在解码单元3解码所述当前帧的解码用数据之后,删除所述缓冲器中的当前帧的解码用数据及其之前的主数据,具体的可以是将所述缓冲器中的主数据向前移动所述当前帧的解码用数据及其之前的主数据的长度。
[0145] 在其他实施例中,所述音频解码装置还可以包括:
[0146] 记录单元(图中未显示),用以在所述处理单元2将所述当前帧内的主数据存入缓冲器中之前,记录所述缓冲器中的主数据的长度为比对长度;
[0147] 第三比对单元(图中未显示),用以在所述处理单元2将所述当前帧内的主数据存入缓冲器中之后,所述解码单元3确定所述当前帧的解码用数据之前,比对所述缓冲器中的当前的主数据的长度与所述下一帧的数据偏移量;
[0148] 若所述缓冲器中的当前的主数据的长度小于或等于所述下一帧的数据偏移量,则将所述下一帧设置为当前帧;若所述缓冲器中的当前的主数据的长度大于所述下一帧的数据偏移量,则所述第三比对单元还用以比对所述比对长度与所述当前帧的数据偏移量:若所述比对长度小于或等于所述当前帧的数据偏移量,则所述删除单元4删除从所述缓冲器中主数据的开始位置向后偏移所述比对长度的主数据,将所述下一帧设置为当前帧;若所述比对长度大于所述当前帧的数据偏移量,则所述删除单元4计算所述比对长度与所述当前帧的数据偏移量的长度差,删除从所述缓冲器中主数据的开始位置向后偏移所述长度差的主数据。
[0149] 所述音频的解码装置可以实现前述的音频的解码方法,所述音频的解码装置的具体操作过程可以参考前述的所述音频的解码方法,此处不再赘述。
[0150] 本发明的技术方案至少具有以下有益效果:
[0151] 将每一帧的主数据都存入缓冲器中,节省判断的时间;由于每一帧的主数据都存入缓冲器中,基于当前帧和/或下一帧的数据偏移量在缓冲器中确定解码当前帧所需的解码用数据,可以准确的判断出解码当前帧所需的解码用数据,简化分析被破坏的帧的主数据是否可用这一步骤,降低了该步骤的复杂度,且提高了解码的质量;解码后删除当前帧的解码用数据,不仅降低了当前帧的解码用数据对后续的解码过程的影响,而且节约了缓冲器的存储空间,而且提高了缓冲器的复用率。
[0152] 在缓冲器中存入主数据时,从缓冲器中的主数据的结束位置后存储,保证缓冲器中的主数据是连续的,以便读取。
[0153] 解码后删除当前帧的解码用数据,具体实施时,可以是删除当前帧的解码用数据后,将缓冲器中剩余的主数据向前移动删除的当前帧的解码用数据的长度,保证每次从缓冲器的开始位置获取主数据,以便正确快速的计算出每一帧的解码用数据。
[0154] 将当前帧内的主数据存入缓冲器之前,基于缓冲器中的主数据的长度和当前帧的数据偏移量判断该帧是否为被破坏的帧,并删除多余的主数据,若该帧为被破坏的帧,则仅将其主数据存入缓冲器,进入下一帧的解码,若为合法正确的帧则继续后续的步骤。这不仅简化了判断帧是否为被破坏的帧的步骤,而且删除多余的主数据防止对后续解码的影响,将被破坏的帧的主数据存入缓冲器,还防止主数据的丢失。
[0155] 在所述将当前帧内的主数据存入缓冲器中之后,确定所述当前帧的解码用数据之前,基于缓冲器中的主数据的长度和下一帧的数据偏移量判断当前帧是否具有解码用数据,若具有解码用数据则进行后续的步骤,若解码用数据有误,则停止当前帧的解码,进行下一帧的解码。这不仅提高了解码的效率,而且提高了解码质量,防止误解码以及解错码。
[0156] 本发明虽然已以较佳实施例公开如上,但其并不是用来限定本发明,任何本领域技术人员在不脱离本发明的精神和范围内,都可以利用上述揭示的方法和技术内容对本发明技术方案做出可能的变动和修改,因此,凡是未脱离本发明技术方案的内容,依据本发明的技术实质对以上实施例所作的任何简单修改、等同变化及修饰,均属于本发明技术方案的保护范围。