一种提取mp3文件采样率的方法及装置的制作方法

文档序号:6777633阅读:332来源:国知局
专利名称:一种提取mp3文件采样率的方法及装置的制作方法
技术领域
本发明涉及音频技术领域,尤其涉及一种提取MP3文件采样率的方法及装置。
背景技术
随着音频压缩技术的日益发展,MP3(MPEGAudioLayer3)格式的音频文件以其压缩率高、失真率小和开放性好而得到越来越广泛的应用。MP3文件的一般结构如图1所示,一个完整的MP3文件由标识3(ID3 tag,Identification tag)和帧数据组成。其中,ID3 tag包括ID3V2 tag和ID3V1 tag两种,ID3V1 tag通常存放于MP3文件的最后128字节,而ID3V2 tag一般存放于MP3文件的起始位置。ID3 tag在MP3文件中是可选的,也就是说,一个MP3文件除包含的帧数据之外,可能既包含ID3V2 tag又包含ID3V1 tag,也可能只包含ID3V2 tag或ID3V1 tag,还可能ID3V2 tag和ID3V1 tag都不包含。
一个帧数据前n个字节就是帧头数据,余下的是音频数据。现有技术中,大多将一个帧的前四个字节作为帧头数据。MP3文件的各个帧都是独立的,每个帧的总时间是26毫秒,但由于每帧的比特率不固定,所以每帧的长度不一定相同。对于一个MP3文件来说,帧头数据通常四个字节一共32比特,其中,31-21比特代表当前帧的帧同步头,20-19比特代表MP3文件的版本信息,15-12比特代表当前帧的比特率,11-10比特代表MP3文件的采样率。帧头数据和字符oxfffe0c00相与运算得到本帧的帧标识符。帧标识符用于表征MP3文件中所有帧的固定特征,一个MP3文件中各个帧的帧标识符应该全部是相同的。
现有技术中对MP3文件采样率的提取,一般会从MP3文件头开始解析,先确定该MP3文件是否包含ID3V2 tag,如果该MP3文件包含ID3V2 tag,那么ID3V2 tag之后就是MP3文件的第一帧的起始位置;如果该MP3文件不包含ID3V2 tag,那么MP3文件头就是第一帧的起始位置。从MP3文件第一帧的起始位置可以读出第一帧的帧头数据,通过对第一帧的帧头数据的解析可以得到本MP3文件的采样率。但是,由于文件在转换格式与转存等过程中,可能会在MP3文件中形成部分无效数据或文件本身数据遭到破坏,如果第一帧的帧数据存在无效数据或帧数据遭到破坏的话,根据第一帧帧头数据得出的文件采样率就是错误的,根据错误的采样率进行的帧长计算就会发生错误,无法准确的找到下一帧的位置,而且,如果使用错误的采样率,会严重影响计算MP3文件播放的总时间和搜索功能。
针对这样的情况,现有的部分MP3播放系统增加了容错程序,就是在发现采样率错误后,重新计算采样率,这样虽然可以提高采样率计算的准确性,但是提高的幅度有限,而且,重新计算采样率会极大影响播放程序的效率,而程序效率对于边读取边播放的MP3文件而言是至关重要的。
因此,现有技术中,对于MP3文件存在无效数据或音频数据遭到一定破坏时,无法准确提取MP3文件的采样率,也就无法根据采样率准确确定出MP3文件当前帧的帧长度和下一帧的起始位置,从而影响MP3文件的正确播放,严重时甚至会导致MP3文件无法正常播放。

发明内容
本发明提供一种提取MP3文件采样率的方法及装置,用以解决现有技术中无法有效进行MP3文件采样率提取的问题。
本发明所提供的提取MP3文件采样率的方法,包括步骤A、将指针指向MP3文件的帧数据;B、从指针处读取当前帧帧头数据并解析,得到当前帧的帧标识符和下一帧的起始位置;C、读取下一帧的帧头数据并解析,得到下一帧的帧标识符;
D、比较两帧的帧标识符,如果两帧的帧标识符一致,则根据所述帧标识符解析出该MP3文件的采样率,否则,所述指针向下移动设定字节数并返回执行步骤B。
较佳地,步骤B中所述读取当前帧帧头数据的方法为从指针处依次读取n个字节数据,所述n为设定的帧头数据的长度。
较佳地,所述步骤D进一步包括当所述两帧的帧标识符不一致时,判断所述指针移动次数是否达到设定的指针移动最大值,如果所述指针移动次数达到所述指针移动最大值,则结束当前流程;否则,将指针向下移动设定字节数。
较佳地,根据所述MP3文件播放所要求的纠错率设定所述指针移动最大值。
本发明所提供的提取MP3文件采样率的装置,包括第一帧头解析单元、第二帧头解析单元、帧标识符比较单元和采样率提取单元,其中,所述第一帧头解析单元,用于从指针处读取当前帧的帧头数据并解析,得到当前帧的帧标识符和下一帧的起始位置;所述第二帧头解析单元,用于根据所述下一帧起始位置读取下一帧的帧头数据并解析,得到下一帧的帧标识符;所述帧标识符比较单元,用于对所述当前帧的帧标识符和下一帧的帧标识符进行比较,如果两帧的帧标识符一致,向采样率提取单元输出所述帧标识符,否则,将所述指针向下移动设定字节数,向第一帧头解析单元输出指针移动信息;所述采样率提取单元,用于根据接收到的帧标识符中解析出本MP3文件的采样率。
较佳地,所述帧标识符比较单元包括第一存储子单元、第二存储子单元、比较子单元和反馈子单元,其中,所述第一存储子单元,用于存储当前帧的帧标识符;
所述第二存储子单元,用于存储下一帧的帧标识符;所述比较子单元,用于对所述当前帧的帧标识符和下一帧的帧标识符进行比较,如果两帧的帧标识符一致,向采样率提取单元输出所述帧标识符;如果两帧的帧标识符不一致,生成指针移动指令;所述反馈子单元,用于根据所述指针移动指令将所述指针向下移动设定字节数,向第一帧头解析单元输出指针移动信息。
较佳地,所述帧标识符比较单元中的比较子单元和反馈子单元之间进一步包括,判断子单元,用于根据接收到的指针移动指令判断指针移动次数是否已经达到设定的指针移动最大值,确定指针移动次数尚没有达到所述指针移动最大值时,向反馈子单元输出指针移动指令。
较佳地,根据MP3文件播放所需要达到的纠错率设定所述指针移动最大值。
本发明中,通过比较MP3文件中两帧数据的帧标识符以确定读取的帧数据是否正确,从而确定是否可以根据读取的帧头数据得到正确的MP3文件采样率。首先将指针移动至MP3文件的帧数据处;从指针处读取当前帧帧头数据并解析,得到当前帧的帧标识符和下一帧的起始位置;然后根据下一帧的起始位置读取下一帧的帧头数据并解析,得到下一帧的帧标识符;比较两帧的帧标识符,如果两帧的帧标识符一致,则根据所述帧标识符解析出该MP3文件的采样率,否则,所述指针向下移动设定字节数,重新从指针处读取当前帧的帧头数据并解析,根据解析得到的下一帧起始位置读取下一帧帧头数据并解析,继续比较两帧的帧标识符直至两帧的帧标识符一致。本发明提供的方案,可以快速准确的提取出MP3文件的采样率,解决了现有技术中由于MP3文件中存在无效数据或数据损坏而引起的采样率计算错误的问题,从而进一步提高MP3文件的播放质量,同时,也提高了MP3文件播放系统的纠错率,提升用户感知度。


图1为现有技术中MP3文件的一般结构示意图;图2为本发明的主要实现原理流程图;图3为本发明提供装置的结构示意图;图4为本发明实施例中帧标识符比较单元结构图;图5为本发明较佳实施例中帧标识符比较单元包括判断子单元的结构示意图。
具体实施例方式
本发明首先确定MP3文件第一帧的起始位置,并将指针移动至第一帧起始位置处;从指针处读取当前帧帧头数据并解析,得到当前帧的帧标识符和下一帧的起始位置;然后根据下一帧的起始位置读取下一帧的帧头数据并解析,得到下一帧的帧标识符;比较两帧的帧标识符,如果两帧的帧标识符一致,则根据所述帧标识符解析出该MP3文件的采样率,否则,所述指针向下移动设定字节数,重新从指针处读取当前帧的帧头数据并解析,根据解析得到的下一帧起始位置读取下一帧帧头数据并解析,继续比较两帧的帧标识符直至两帧的帧标识符一致。
下面结合各个附图对本发明技术方案的主要实现原理具体实施方式
及其对应能够达到的有益效果进行详细的阐述。
如图2所示,本发明的主要实现原理流程如下步骤10,一个完整的MP3文件至少包括帧数据,由于ID3 tag是可选的,所以一个MP3文件有可能全部是帧数据。如果一个MP3文件存在ID3V2 tag,那么该MP3文件起始的三个字节就是设定字节“tag”,紧随“tag”之后的数据为ID3V2 tag的数据长度。如果一个MP3文件起始位置是“tag”,可以判定该MP3文件包含ID3V2 tag,进一步根据“tag”之后的数据判定ID3V2 tag的长度,从而获取该MP3文件第一帧的位置。如果一个MP3文件起始的三个字节不是“tag”,则该MP3文件不包含ID3V2 tag,该MP3文件起始位置就是第一帧的起始位置。确认了第一帧的位置后,将指针移动至第一帧的起始位置处。这里所述的指针是一个读数指针,可以根据需要向上或向下移动设定的字节数,将指针所指向的位置作为当前帧的起始位置。
步骤20,从指针处读取当前帧帧头数据并解析,得到当前帧的帧标识符和下一帧的起始位置。
MP3文件的每帧数据都包含n个字节的帧头数据,其余为音频数据。现有技术中,每帧的帧头数据的长度一般是四个字节,因而,从当前帧的起始位置依次读取四个字节的数据,得到的就是当前帧的帧头数据。
对于一个MP3文件来说,帧头数据四个字节一共32比特,其中,31-21比特代表当前帧的帧同步头,20-19比特代表MP3文件的版本信息,15-12比特代表当前帧的比特率,11-10比特代表MP3文件的采样率。根据当前帧的比特率和本MP3文件的采样率,可以计算出当前帧的长度,从而根据本帧的长度确定下一帧的起始位置。包含以上信息的帧头数据与字符oxfffe0c00进行相与运算,可以得到当前帧的帧标识符。
步骤30,根据得到的下一帧的起始位置读取下一帧的帧头数据并解析,得到下一帧的帧标识符。
步骤40、比较两帧的帧标识符,如果两帧的帧标识符一致,执行步骤50;否则,执行步骤60。
由于在MP3文件格式转换等过程中,可能会在MP3文件中形成无效数据,因而直接读取第一帧的帧头数据有可能由于存在无效数据而不能解析出正确的文件采样率。根据第一帧帧头数据解析出的下一帧起始位置读取下一帧帧头数据,比较两帧的帧标识符,由于两帧的帧头数据同时存在无效数据或损坏的几率极低,所以,如果两帧的帧标识符一致,说明两帧的帧头数据均是正确的,可以根据任一帧的帧头数据解析出本MP3文件的采样率;如果两帧的帧标识符不一致,说明至少其中一帧的帧头数据存在无效数据或损坏,无法保证根据其中一帧的帧头数据解析出的采样率是正确的,需要通过指针的移动,重新从指针处读取当前帧的帧头数据并解析,根据解析得到的下一帧起始位置读取下一帧帧头数据并解析,比较两帧的帧标识符直至两帧的帧标识符一致。
步骤50、根据所述两帧中任一帧的帧标识符解析出该MP3文件的采样率,结束当前流程。
步骤60、指针向下移动设定字节数并返回执行步骤20。
由于两帧的帧标识符比较结果不一致,说明至少其中一帧的帧头数据存在无效数据或损坏。首先假设当前帧的第一个字节损坏或无效数据存在于第一个字节,指针向下移动设定字节数,这里可以设定指针向下移动一个字节,重复执行步骤20、步骤30与步骤40,如果所得两帧帧标识符的比较结果依然不一致,则假设当前帧的第二个字节也损坏或无效数据存在于第二字节,指针继续向下移动设定字节数并返回执行步骤20,如此循环,直至得到两帧的帧标识符比较结果一致。
特别地,在执行步骤60之前,还可以存在一个判断循环次数的过程,就是设定一个指针移动最大值。每次指针移动之前,需要判断指针移动次数是否达到指针移动最大值。如果指针移动次数没有达到指针移动最大值,继续执行步骤60;如果指针移动次数达到指针移动最大值,两帧的帧标识符比较结果仍然不一致,则认为本MP3文件已经损坏严重,无法继续读取,指针不再移动,当前流程结束。此处,指针移动最大值与系统所要求的MP3文件播放的纠错率等因素相关,根据系统要求达到的MP3文件播放的纠错率等指标设定。
以上仅是以指针的初始位置为MP3文件第一帧的起始位置的情况为例进行描述的,实际上,指针的初始位置可以是MP3文件帧数据的任意位置,相应的后续步骤均与上述方法相同,此处不再赘述。
相应地,本发明还提供了一种提取MP3文件采样率的装置,如图3所示,该装置包括第一帧头解析单元100、第二帧头解析单元200、帧标识符比较单元300和采样率提取单元400,具体如下
第一帧头解析单元100,用于从指针处读取当前帧的帧头数据并解析,得到当前帧的帧标识符和下一帧的起始位置,并分别向第二帧头解析单元200输出下一帧的起始位置,向帧标识符比较单元300输出当前帧的帧标识符。
由于MP3文件每帧的前四个字节即为帧头数据,故从当前帧的起始位置依次读取四个字节的数据得到的就是当前帧的帧头数据。帧头数据一共32比特,其中,31-21比特代表当前帧的帧同步头,20-19比特代表MP3文件的版本信息,15-12比特代表当前帧的比特率,11-10比特代表MP3文件的采样率。根据当前帧的比特率和本MP3文件的采样率,可以计算出当前帧的长度,从而得到下一帧的起始位置。包含以上信息的帧头数据与字符oxfffe0c00进行相与运算,可以得到当前帧的帧标识符。
这里所述的指针为一个读数指针,初始位置位于第一帧的起始位置处,并可以根据设定向上或向下移动设定的字节数。
第二帧头解析单元200,用于根据接收到的下一帧起始位置读取下一帧的帧头数据并解析,得到下一帧的帧标识符并向帧标识符比较单元300输出下一帧的帧标识符。
帧标识符比较单元300,用于对接收到的当前帧帧标识符和下一帧帧标识符进行比较,如果两帧的帧标识符一致,则向采样率提取单元400输出两帧中任一帧的帧标识符;否则,将指针在现有基础上向下移动设定字节数,并向第一帧头解析单元100输出指针移动信息。
相应的,第一帧头解析单元100在收到指针移动信息后,从指针处重新读取当前帧的帧头数据,即从指针处依次读取四个字节数据作为当前帧的帧头数据并进行相应的操作。
采样率提取单元400,用于根据接收到的帧标识符解析出本MP3文件的采样率。
特别地,在本发明的一个较佳实施例中,如图4所示,所述帧标识符比较单元300包括第一存储子单元301、第二存储子单元302、比较子单元303和反馈子单元304,其中,第一存储子单元301,用于接收与存储当前帧的帧标识符,并向比较子单元303输出当前帧的帧标识符。
第二存储子单元302,用于接收与存储下一帧的帧标识符,并向比较子单元303输出下一帧的帧标识符。
比较子单元303,用于对接收到的当前帧的帧标识符和下一帧的帧标识符进行比较,如果两帧的帧标识符一致,则向采样率提取单元400输出两帧中任一帧的帧标识符,采样率提取单元400用于根据接收到的帧标识符解析出本MP3文件的采样率;如果两帧的帧标识符不一致,则向反馈子单元304输出指针移动指令。
反馈子单元304,用于根据接收到的指针移动指令将所述读数指针向下移动设定字节数,并向第一帧头解析单元100输出指针移动信息。第一帧头解析单元100根据接收到的指针移动信息做相应操作。
特别地,在本发明的一个较佳实施例中,如图5所示,所述帧标识符比较单元300中的比较子单元303和反馈子单元304之间还包括一个判断子单元305,此时,比较子单元303,用于在比较接收到的两帧的帧标识符并确定两帧的帧标识符不一致时,向判断子单元305输出指针移动指令;判断子单元305,用于根据接收到的指针移动指令判断指针移动次数是否已经达到指针移动最大值,如果指针移动次数已经达到指针移动最大值,则认为本MP3文件已经严重损坏,无法继续读取,可进一步向相关播放程序单元反馈文件已损坏的信息,相关播放程序单元根据反馈信息进行相应操作;如果指针移动次数尚没有达到指针移动最大值,则向反馈子单元304输出指针移动指令。
特别地,这里所述的指针移动最大值根据MP3文件播放所需要达到的纠错率设定,可以动态调整。
反馈子单元304,用于根据接收到的指针移动指令进行相应的指针移动操作。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。
权利要求
1.一种提取MP3文件采样率的方法,其特征在于,该方法包括步骤A、将指针指向MP3文件的帧数据;B、从指针处读取当前帧帧头数据并解析,得到当前帧的帧标识符和下一帧的起始位置;C、读取下一帧的帧头数据并解析,得到下一帧的帧标识符;D、比较两帧的帧标识符,如果两帧的帧标识符一致,则根据所述帧标识符解析出该MP3文件的采样率,否则,所述指针向下移动设定字节数并返回执行步骤B。
2.如权利要求1所述的方法,其特征在于,步骤B中所述读取当前帧帧头数据的方法为从指针处依次读取n个字节数据,所述n为设定的帧头数据的长度。
3.如权利要求1所述的方法,其特征在于,所述步骤D进一步包括当所述两帧的帧标识符不一致时,判断所述指针移动次数是否达到设定的指针移动最大值,如果所述指针移动次数达到所述指针移动最大值,则结束当前流程;否则,将指针向下移动设定字节数。
4.如权利要求3所述的方法,其特征在于,根据所述MP3文件播放所要求的纠错率设定所述指针移动最大值。
5.一种提取MP3文件采样率的装置,其特征在于,包括第一帧头解析单元、第二帧头解析单元、帧标识符比较单元和采样率提取单元,其中,所述第一帧头解析单元,用于从指针处读取当前帧的帧头数据并解析,得到当前帧的帧标识符和下一帧的起始位置;所述第二帧头解析单元,用于根据所述下一帧起始位置读取下一帧的帧头数据并解析,得到下一帧的帧标识符;所述帧标识符比较单元,用于对所述当前帧的帧标识符和下一帧的帧标识符进行比较,如果两帧的帧标识符一致,向采样率提取单元输出所述帧标识符,否则,将所述指针向下移动设定字节数,向第一帧头解析单元输出指针移动信息;所述采样率提取单元,用于根据接收到的帧标识符中解析出本MP3文件的采样率。
6.如权利要求5所述的装置,其特征在于,所述帧标识符比较单元包括第一存储子单元、第二存储子单元、比较子单元和反馈子单元,其中,所述第一存储子单元,用于存储当前帧的帧标识符;所述第二存储子单元,用于存储下一帧的帧标识符;所述比较子单元,用于对所述当前帧的帧标识符和下一帧的帧标识符进行比较,如果两帧的帧标识符一致,向采样率提取单元输出所述帧标识符;如果两帧的帧标识符不一致,生成指针移动指令;所述反馈子单元,用于根据所述指针移动指令将所述指针向下移动设定字节数,向第一帧头解析单元输出指针移动信息。
7.如权利要求6所述的装置,其特征在于,所述帧标识符比较单元中的比较子单元和反馈子单元之间进一步包括,判断子单元,用于根据接收到的指针移动指令判断指针移动次数是否已经达到设定的指针移动最大值,确定指针移动次数尚没有达到所述指针移动最大值时,向反馈子单元输出指针移动指令。
8.如权利要求7所述的装置,其特征在于,根据MP3文件播放所需要达到的纠错率设定所述指针移动最大值。
全文摘要
本发明公开了一种提取MP3文件采样率的方法,首先将指针移动至MP3文件帧数据处;从指针处读取当前帧帧头数据并解析,得到当前帧的帧标识符和下一帧的起始位置;然后读取下一帧的帧头数据并解析,得到下一帧的帧标识符;比较两帧的帧标识符,如果两帧的帧标识符一致,则解析出该MP3文件的采样率;否则,所述指针向下移动设定字节数,重新从指针处读取当前帧的帧头数据并解析,根据解析得到的下一帧起始位置读取下一帧帧头数据并解析,比较两帧的帧标识符直至两帧的帧标识符一致。相应的,本发明还提供一种提取MP3文件采样率的装置。本发明提供的方案,可以快速准确的提取出MP3文件的采样率,从而进一步提高MP3文件的播放质量。
文档编号G11C7/16GK101030381SQ20071006454
公开日2007年9月5日 申请日期2007年3月19日 优先权日2007年3月19日
发明者梁玉玲 申请人:北京中星微电子有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1