APE格式解析

本文详细介绍了APE格式的seek方案,重点解析了文件头中的关键信息,包括seektable、totalframes及其与duration的关系。通过公式1至4,阐述了如何根据文件头数据计算特定seektime的时间点偏移量pos,特别是duration的计算方法,分为totalframes大于1和小于等于1两种情况。
摘要由CSDN通过智能技术生成
APE格式解析
        ape是一种无损压缩音频技术,网上有很多资料都是讲什么是ape,如何得到ape文件,但是鲜有对其文件内部码流结构分析的文章。最近正好在研究ape格式的码流结构,分析其文件头信息等,苦于资料太少,不过经过自己的一番努力,基本已经把ape格式的码流结构归纳出来了。
        在正式介绍之前先给出ffmpeg-2.0.1中对ape格式定义的结构体,可以根据该结构体先大致的了解ape格式会有哪些重要的数据结构需要存储起来。
typedef struct {
    /* Derived fields */
    uint32_t junklength;
    uint32_t firstframe;
    uint32_t totalsamples;
    int currentframe;
    APEFrame *frames;

    /* Info from Descriptor Block */
    char magic[4];
    int16_t fileversion;
    int16_t padding1;
    uint32_t descriptorlength;
    uint32_t headerlength;
    uint32_t seektablelength;
    uint32_t wavheaderlength;
    uint32_t audiodatalength;
    uint32_t audiodatalength_high;
    uint32_t wavtaillength;
    uint8_t md5[16];

    /* Info from Header Block */
    uint16_t compressiontype;
    uint16_t formatflags;
    uint32_t blocksperframe;
    uint32_t finalframeblocks;
    uint32_t totalframes;
    uint16_t bps;
    uint16_t channels;
    uint32_t samplerate;

    /* Seektable */
    uint32_t *seektable;
    uint8_t  *bittable;
} APEContext;

        下面开始详细介绍这些数据结构具体在ape文件中是以怎样的顺序和形式存放的。需要重点说明的是ape格式中都是以小端存储的,也就是你用二进制查看四个字节是0x12345678求其大小的时候应该是0x78563412,也就是2018915346 ,应该时刻牢记这一点。
        ape格式文件头的数据存储形式受版本号fileversion和格式标志位formatflags的影响,待会其中的一部分会直接用代码的方式来说明,那样比较好理解一些。

char                 magic[4]                                                             "MAC " ape文件标志,第4位是空格。
int16_t             fileversion                                                         ape的版本号,其值在3800到3990之间,如为3900即表示3.90版本

之后的数据存储结构分为两种情况,fileversion >= 3980的和file
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值