关键数据结构之帧结构:mad_herder和mad_frame

本文介绍了MP3帧结构,包括mad_herder和mad_frame两个关键数据结构,用于存储音频的描述信息和采样数据。mad_herder包含音频层、声道模式、比特率等信息,而mad_frame则包含帧头和采样数据。通过Madlib解码后,使用output回调函数处理PCM数据,示例代码中输出到屏幕。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一个MP3帧由帧头和帧数据构成。Madlib分别填充mad_herdermad_frame这两个结构,然后进行解码。mad_herder里包含mp3数据的描述信息,这个结构在frame.h头文件中定义:

layer成员的类型是enum mad_layer,这个枚举类型有3个取值(123),分别对应MPEG音频的123层;mode成员描述音频的声道数和立体声类型,取值为MAD_MODE_SINGLE_CHANNEL(单声道)、MAD_MODE_DUAL_CHANNEL(双声道)、MAD_MODE_JOINT_STEREO(联合立体声)、MAD_MODE_STEREO(普通立体声);接下来的比特率、采样率、CRC校验、播放时间等信息直接来自mp3帧。

mad_frame包含一个帧头(mad_herder)和一帧中的采样数据。该结构同样定义于frame.h头文件中:

 

其中的option字段来自mad_stream结构,sbsample[2][36][32]中保存的就是从mp3文件中取得的采样数据:2个声道,每声道36个采样(可播放26ms的音频,每秒帧速率大约为38fps);overlap指针成我员不了解它的用途,希望有高手不吝赐教!

Madlib每次解码循环结束时解码完成一个帧,将1152PCM采样数据保存在数组里传递给output回调函数作输出前的处理。压缩包里的参考示例minimad.c中的output回调函数只是简单地将PCM数据在屏幕上打印显示:

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值