近日公司分配给我任务,其中一个就是读取MP3文件的TAG信息。经过在网上搜索,自己总结出来比较完整的读取代码。
什么是ID3信息?这个我不做回答,请自己访问 www.id3.org(E文网站,E文不好这自己使用 www.google.com 搜索http://www.google.com/search?hl=zh-CN&q=%E4%BB%80%E4%B9%88%E6%98%AFID3&lr=lang_zh-CN
本来自己想使用 VC6 写一个示例工程的,但是发觉自己现在越来越懒了,不写了,仅仅把C代码贴出来,说明一下就算了。
1、 贴出来的是两个文件.h和.c,注意:这并不是一个类,而是在C中使用的文件
2、 代码中读文件使用的是API函数,例如HFILE, ReadFile(..)等,这也是我太懒了,不愿意改过来 J
3、 代码很简单,我也不做详细说明了,自己慢慢看吧
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// .h 文件
/********************************************************************
文件说明: 读取Audio文件中的信息。例如读入MP3中的ID3V1信息
文件名称: audioInfo.h
版本号 : 1.0.0
开发日期: 2005-10-24 9:11
作 者: hengai
修改纪录:
2005-10-24 17:30: 扩充了 ID3V2 的TAG定义。并且由原来的 #define 更改为 static LPCTSTR
2005-10-24 18:10: 能够读取 MP3 中的所有ID3V2信息。
更改了读取的结构体 MP3ID3V2INFO 定义以及用户使用这些信息的方式(在结构体定义中有说明)
*********************************************************************/
#define AUDIO_OUT_ERRMSG //定义能够输出出错信息
//////////////////////////////////////////////////////////////////////////
//定义读取 MP3 ID3V1 所需要的结构体
//MP3 ID3V1 信息保存到MP3文件的最后128个字节中
typedef struct tag_MP3ID3V1INFO //MP3信息的结构ShitMP3v1.07
{
TCHAR Identify[3]; //TAG三个字母。这里可以用来鉴别是不是文件信息内容
TCHAR Title[30]; //歌曲名,30个字节
TCHAR Artist[30]; //歌手名,30个字节
TCHAR Album[30]; //所属唱片,30个字节
TCHAR Year[4]; //年,4个字节
TCHAR Comment[28]; //注释,一般为28个字节(也可能30个字节,这时候占用下面的2个字节)
UCHAR CommentFlag; //保留位1,注释长度标志位。如果是 0x00 表明注释长度为28,否则为30
UCHAR Track; //保留位2,那个“第几首”,是个整数
UCHAR Genre; //保留位3,歌曲风格,在0-148之间。例如Pop,General...
TCHAR pszGenre[30]; //保存了音乐的类型。
//
BOOL bHasTag; //这个 MP3 是否存在 ID3V1 TAG信息
} MP3ID3V1INFO, *PMP3ID3V1INFO;
//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
//MP3 ID3V2 FrameID
enum ID3_FrameID{
/* ???? */ ID3FID_NOFRAME = 0, /**< No known frame */
/* AENC */ ID3FID_AUDIOCRYPTO, /**< Audio encryption */
/* APIC */ ID3FID_PICTURE, /**< Attached picture */
/* ASPI */ ID3FID_AUDIOSEEKPOINT, /**< Audio seek point index */
/* COMM */ ID3FID_COMMENT, /**< Comments */
/* COMR */ ID3FID_COMMERCIAL, /**< Commercial frame */
/* ENCR */ ID3FID_CRYPTOREG, /**< Encryption method registration */
/* EQU2 */ ID3FID_EQUALIZATION2, /**< Equalisation (2) */
/* EQUA */ ID3FID_EQUALIZATION, /**< Equalization */
/* ETCO */ ID3FID_EVENTTIMING, /**< Event timing codes */
/* GEOB */ ID3FID_GENERALOBJECT, /**< General encapsulated object */
/* GRID */ ID3FID_GROUPINGREG, /**< Group identification registration */
/* IPLS */ ID3FID_INVOLVEDPEOPLE, /**< Involved people list */
/* LINK */ ID3FID_LINKEDINFO, /**< Linked information */
/* MCDI */ ID3FID_CDID, /**< Music CD identifier */
/* MLLT */ ID3FID_MPEGLOOKUP, /**< MPEG location lookup table */
/* OWNE */ ID3FID_OWNERSHIP, /**< Ownership frame */
/* PRIV */ ID3FID_PRIVATE, /**< Private frame */
/* PCNT */ ID3FID_PLAYCOUNTER, /**< Play counter */
/* POPM */ ID3FID_POPULARIMETER, /**< Popularimeter */
/* POSS */ ID3FID_POSITIONSYNC, /**< Position synchronisation frame */
/* RBUF */ ID3FID_BUFFERSIZE, /**< Recommended buffer size */
/* RVA2 */ ID3FID_VOLUMEADJ2, /**< Relative volume adjustment (2) */
/* RVAD */ ID3FID_VOLUMEADJ, /**< Relative volume adjustment */
/* RVRB */ ID3FID_REVERB, /**< Reverb */
/* SEEK */ ID3FID_SEEKFRAME, /**< Seek frame */
/* SIGN */ ID3FID_SIGNATURE, /**< Signature frame */
/* SYLT */ ID3FID_SYNCEDLYRICS, /**< Synchronized lyric/text */
/* SYTC */ ID3FID_SYNCEDTEMPO, /**< Synchronized tempo codes */
/* TALB */ ID3FID_ALBUM, /**< Album/Movie/Show title */
/* TBPM */ ID3FID_BPM, /**< BPM (beats per minute) */
/* TCOM */ ID3FID_COMPOSER, /**< Composer */
/* TCON */ ID3FID_CONTENTTYPE, /**< Content type */
/* TCOP */ ID3FID_COPYRIGHT, /**< Copyright message */
/* TDAT */ ID3FID_DATE, /**< Date */
/* TDEN */ ID3FID_ENCODINGTIME, /**< Encoding time */
/* TDLY */ ID3FID_PLAYLISTDELAY, /**< Playlist delay */
/* TDOR */ ID3FID_ORIGRELEASETIME, /**< Original release time */
/* TDRC */ ID3FID_RECORDINGTIME, /**< Recording time */
/* TDRL */ ID3FID_RELEASETIME, /**< Release time */
/* TDTG */ ID3FID_TAGGINGTIME, /**< Tagging time */
/* TIPL */ ID3FID_INVOLVEDPEOPLE2, /**< Involved people list */
/* TENC */ ID3FID_ENCODEDBY, /**< Encoded by */
/* TEXT */ ID3FID_LYRICIST, /**< Lyricist/Text writer */
/* TFLT */ ID3FID_FILETYPE, /**< File type */
/* TIME */ ID3FID_TIME, /**< Time */
/* TIT1 */ ID3FID_CONTENTGROUP, /**< Content group description */
/* TIT2 */ ID3FID_TITLE, /**< Title/songname/content description */
/* TIT3 */ ID3FID_SUBTITLE, /**< Subtitle/Description refinement */
/* TKEY */ ID3FID_INITIALKEY, /**< Initial key */
/* TLAN */ ID3FID_LANGUAGE, /**< Language(s) */
/* TLEN */ ID3FID_SONGLEN, /**< Length */
/* TMCL */ ID3FID_MUSICIANCREDITLIST,/**< Musician credits list */
/* TMED */ ID3FID_MEDIATYPE, /**< Media type */
/* TMOO */ ID3FID_MOOD, /**< Mood */
/* TOAL */ ID3FID_ORIGALBUM, /**< Original album/movie/show title */
/* TOFN */ ID3FID_ORIGFILENAME, /**< Original filename */
/* TOLY */ ID3FID_ORIGLYRICIST, /**< Original lyricist(s)/text writer(s) */
/* TOPE */ ID3FID_ORIGARTIST, /**< Original artist(s)/performer(s) */
/* TORY */ ID3FID_ORIGYEAR, /**< Original release year */
/* TOWN */ ID3FID_FILEOWNER, /**< File owner/licensee */
/* TPE1 */ ID3FID_LEADARTIST, /**< Lead performer(s)/Soloist(s) */
/* TPE2 */ ID3FID_BAND, /**< Band/orchestra/accompaniment */
/* TPE3 */ ID3FID_CONDUCTOR, /**< Conductor/performer refinement */
/* TPE4 */ ID3FID_MIXARTIST, /**< Interpreted, remixed, or otherwise modified by */
/* TPOS */ ID3FID_PARTINSET, /**< Part of a set */
/* TPRO */ ID3FID_PRODUCEDNOTICE, /**< Produced notice */
/* TPUB */ ID3FID_PUBLISHER, /**< Publisher */
/* TRCK */ ID3FID_TRACKNUM,