首页 > 编程知识 正文

将文件改为mp3可识别的格式,mp3的文件格式是什么

时间:2023-05-04 15:24:34 阅读:108468 作者:2651

mp3再现参考代码(libmad库) :my_minimad

wav播放参考代码(alsa声卡、alsa-lib库) :wav_miniplay

WAV格式的文件头(文件头以外是音频数据),很简单。 当然了

sructwavfmtheader { char str riff [4]; /* 'RIFF '资源文件标志,固定字符*/unsigned long dwTotalByte; /*从下一个成员到文件末尾的字节总数*/char strWAVE[4]; /* 'WAVE '表示是WAVE文件,*/char strFmt[4]; /* 'fmt '波形格式标志,固定字符*/unsigned long dwPcmFmt; /*数据格式16LE、32LE等*/unsigned short bIsCompress; /*是否为压缩的PCM代码。 大于1时有压缩,等于1时无压缩*/unsigned short wChannels; /*通道数*/unsigned long dwPcmSampRate; /*采样频率*/unsigned long dwByteRate;/*字节速率、字节速率=采样频率*音频通道数*数据位数/8 */unsigned short wFrameSize; /*块对齐/帧大小framesize=通道数*数据位数/8 */unsigned short wSampBitWidth; /*示例数据的位数*/char strData[4]; /* 'data '数据标志,固定字符*/unsigned long dwPcmDataSize; /*实际音频数据大小*/}; 1. MP3全名是mpeg-1播放器iii音频文件mpeg(movingpictureexpertsgroup )视频专家组(mpeg )或为图像创建的标准组织,成立于1988年,为压缩复杂性

2.1 ID3vX ID3vX是作为帧存在于MP3文件中的标签,但不是MP3文件的有效音频数据的帧,而是包含作曲者、乐曲的制作时间等乐曲信息的标签

ID3v1第一个版本的音频标签。 长度为固定的128字节,位于MP3文件的末尾。 (实际上,我看到了很多MP3文件,但是我怀疑末尾没有这个标记框架。)

ID3v1 标签帧的数据格式如下所示:

char Header[3]; /*标记标头必须为“TAG”。 否则,标记*/char Title[30]; /*标题*/char Artist[30]; /*作者*/char Album[30]; /*专辑*/char Year[4]; /*出品年代*/char Comment[30]; /*备注*/char Genre; /*类型() /其数据存储按顺序逐个存储,长度不够时补0。 ID3v1应该已经很少使用了

ID3v2.3 ID3v2其实有四个版本,但因为常用的只有2.3这个版本,所以这里只记录了2.3版本的信息

ID3v2.3包括标签头和标签帧,标签头记录版本和整个ID3v2.3的大小,标签帧记录歌曲信息

ID3v2.3 在文件的开头存放,从第一个字节开始,整个 ID3v2 的结构图如下所示

ID3v2的结构图描述了字节数内容标签头ID3v2标签3固定字符“ID3”,表示为ID3v2标签ID3v2子版本号203H 00H,给出了ID3v2.3ID3v2标签1abc00000B a异步编码b扩展标签头c测试指示一般来说,0ID3v2尺寸4只有后7位有效,size=bytea :7 *0x 200000 byteb :7 *0x 4000 bytec :7 *0x 80 byted :7扩展标签头扩展标签头的尺寸40x4000byte0x80 byte3扩展标志2xx完成大小4您可以在所有标签帧之后添加完成数据,也可以保留存储额外帧的空间,使整个标签的大小大于标签标头的大小。 这里记录的是增加的大小,通常不使用标签帧显示4的固定4个字符,来识别这个帧中存储的内容是什么。 标识请参考以下对照表。 标签帧标识及其语义对照表帧大小4 size=byte0*0x 200000 byte1*0x 4000 byte2*0x 80 byte 3标识2存储在不重要帧数据size中的数据………可用大小00h…/

Vx 的头部结构 */struct IDxVxHeader{ unsigned char aucIDx[3]; /* 保存的值比如为"ID3"表示是ID3V2 */ unsigned char ucVersion; /* 如果是ID3V2.3则保存3,如果是ID3V2.4则保存4 */ unsigned char ucRevision; /* 副版本号 */ unsigned char ucFlag; /* 存放标志的字节 */ unsigned char aucIDxSize[4]; /* 整个 IDxVx 的大小,除去本结构体的 10 个字节 */ /* 只有后面 7 位有用 */}; 2.2 CBR 与 VBR CBR :帧长度固定,也就是说每一帧的播放时间是固定的,知道了一帧的长度以及文件的大小就可以计算出整个播放时长VBR :帧长不固定,要获得整个播放时长需要知道文件一共有多少帧

帧长计算公式

LayerII 与 LayerII
帧长 = (每帧采样次数 * 比特率 / 8 / 采样率) + 补白
LayerI
帧长 = (每帧采样次数 * 比特率 / 8 / 采样率) + 补白 * 4

CBR 总播放时长计算公式

播放时长 = (文件大小 – ID3标签大小) * 8 / 比特率

VBR 总播放时长计算公式

播放时长 = 有效数据帧总帧数 * 每帧采样数 / 采样率
每帧数据的采样数索引表:每帧数据的采样数表
每一帧的播放时长计算公式
帧播放时长 = 采样数 / 采样频率 * 1000 毫秒

事实上 windows 上面我看到的都是按照 CBR 格式计算时长的,所以采用 CBR 格式计算即可

2.3 有效数据帧

所有的有效数据帧都有帧头,帧头为 4 个字节,它们的含义如下所示

有效数据帧帧头 偏移地址(bits)位数(bits)内容011帧同步标识,表示数据帧一帧的开始112MPEG 音频版本号,参照表:MPEG 音频版本表132Layer 版本,参照表:Layer 索引表151保护位,0 - 16bit CRC 0 - 无 CRC164比特率索引,参照表:比特率索引表(单位-Kbps)202采样率索引,参照表:采样率索引表221如果设置的话数据被补空为一个 slot,LayerI slot 是 4 字节,其余为 1 字节231私有位242channel 模式,参照表:channel 模式表262模式扩展281Copyright 位291Original 位302强调,不关注

结构体可定义为如下所示:

struct DataFrameHeader{ unsigned int bzFrameSyncFlag1:8; /* 全为 1 */ unsigned int bzProtectBit:1; /* CRC */ unsigned int bzVersionInfo:4; /* 包括 mpeg 版本,layer 版本 */ unsigned int bzFrameSyncFlag2:3; /* 全为 1 */ unsigned int bzPrivateBit:1; /* 私有 */ unsigned int bzPaddingBit:1; /* 是否填充,1 填充,0 不填充 layer1 是 4 字节,其余的都是 1 字节 */ unsigned int bzSampleIndex:2; /* 采样率索引 */ unsigned int bzBitRateIndex:4; /* bit 率索引 */ unsigned int bzExternBits:6; /* 版权等,不关心 */ unsigned int bzCahnnelMod:2; /* 通道 * 00 - Stereo 01 - Joint Stereo * 10 - Dual 11 - Single */};

VBR 有效数据帧

由于市面上大多数 MP3 压缩都是用的 LAME 公司的技术,所以只讲 LAME 公司,”Info” 与 “Xing” 都是 LAME 公司的数据压缩标识
采用 VBR 编码的音频数据在有效数据帧的第一帧会有一个 VBR 头,且只有第一帧有,头部标识为 “Xing”。数据帧的第一帧包涵了整个 MP3 文件的信息,帧头是 4 个字节,接着是 32 字节的 0 填充,然后是 “Info” 或者 “Xing” 字符标识

此 VBR 头在上面有效数据帧帧头之后偏移 32 字节的位置,数据格式如下

VBR 头 偏移(byte)长度(byte)内容04固定的 ‘Xing’ or ‘Info’44不关注84帧数量,大端存储8 or 124字节数,大端存储8, 12 or 16100100 个时间点索引,例如一段音频长 3 分钟,分成 100 份,记录每一段的起始位置8, 12, 16, 108, 112, 1164不关注 3. MP3 文件的内容排列 ID3v2 如果有的话补空 如果有 ID3V2VBR帧(有效数据帧第一帧) 如果是 VBR 编码的话有效数据帧 一定有ID3v1 一定有(大多数地方写的),我看到的就没有 MPEG 音频版本表 indexcontent00MPEG 2.501reserved10MPEG 211MPEG 1 Layer 索引表 indexcontent00reserved01LayerIII10LayerII11LayerI 比特率索引表(单位 Kbps) index------Bitrate IndexMPEG 1MPEG 2,2.5LayerILayerIILayerIIILayerILayerII & LayerIII0000000132323232800106448404816001196564856240100128645664320101160806480400110192968096480111224112961125610002561281121286410012881601281448010103201921601609610113522241921761121100384256224192128110141632025622414411104483843202561601111 采样率索引表 采样率索引MPEG-1 (Hz)MPEG-2 (Hz)MPEG-2.5 (Hz)0044100220501102501480002400012000103200016000800011reservedreservedreserved 每帧数据的采样数 -MPEG 1MPEG 2 (LSF)MPEG 2.5 (LSF)Layer I384384384Layer II115211521152Layer III1152576576 channel 模式表 indexcontent00Stereo01Joint Stereo (Stereo)10Dual channel (Two mono channels)11Single channel (Mono) 标签帧的标识以及其意义对照表 indexcontentAENC[Audio encryption]APIC[Attached picture]COMM[Comments]COMR[Commercial frame]ENCR[Encryption method registration]EQUA[Equalization]ETCO[Event timing codes]GEOB[General encapsulated object]GRID[Group identification registration]IPLS[Involved people list]LINK[Linked information]MCDI[Music CD identifier]MLLT[MPEG location lookup table]OWNE[Ownership frame]PRIV[Private frame]PCNT[Play counter]POPM[Popularimeter]POSS[Position synchronisation frame]RBUF[Recommended buffer size]RVAD[Relative volume adjustment]RVRB[Reverb]SYLT[Synchronized lyric/text]SYTC[Synchronized tempo codes]TALB[Album/Movie/Show title]TBPM[BPM (beats per minute)]TCOM[Composer]TCON[Content type]TCOP[Copyright message]TDAT[Date]TDLY[Playlist delay]TENC[Encoded by]TEXT[Lyricist/Text writer]TFLT[File type]TIME[Time]TIT1[Content group description]TIT2[Title/songname/content description]TIT3[Subtitle/Description refinement]TKEY[Initial key]TLAN[Language(s)]TLEN[Length]TMED[Media type]TOAL[Original album/movie/show title]TOFN[Original filename]TOLY[Original lyricist(s)/text writer(s)]TOPE[Original artist(s)/performer(s)]TORY[Original release year]TOWN[File owner/licensee]TPE1[Lead performer(s)/Soloist(s)]TPE2[Band/orchestra/accompaniment]TPE3[Conductor/performer refinement]TPE4[Interpreted, remixed, or otherwise modified by]TPOS[Part of a set]TPUB[Publisher]TRCK[Track number/Position in set]TRDA[Recording dates]TRSN[Internet radio station name]TRSO[Internet radio station owner]TSIZ[Size]TSRC[ISRC (international standard recording code)]TSSE[Software/Hardware and settings used forTYER[Year]TXXX[User defined text information frame]UFID[Unique file identifier]USER[Terms of use]USLT[Unsychronized lyric/text transcription]WCOM[Commercial information]WCOP[Copyright/Legal information]WOAF[Official audio file webpage]WOAR[Official artist/performer webpage]WOAS[Official audio source webpage]WORS[Official internet radio station homepage]WPAY[Payment]WPUB[Publishers official webpage]WXXX[User defined URL link frame]

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。