读取部分:
- $filename = "srkl.mp3";
- $fp = fopen($filename, "rb") or die("Unable to open this mp3.");
- fseek($fp,-128,SEEK_END);
- $header = fread($fp,3); // Header[3]
- if (‘TAG’!=$header) die("Unknown Header Information:".$header);
- $title = trim(fread($fp,30)); // Title[30]
- $artist = trim(fread($fp,30)); // Artist[30]
- $album = trim(fread($fp,30)); // Album[30]
- $year = fread($fp,4); // Year[4]
- $comment = trim(fread($fp,28)); // Comment[28]
- fseek($fp,1,SEEK_CUR); // reserve
- $track = ord(fread($fp,1)); // Track[1]
- $genre = ord(fread($fp,1)); //Genre[1]
- fclose($fp);
- echo "
- Title:$title
- Artist:$artist
- Album:$album
- Year:$year
- Comment:$comment
- Track:$track
- Genre:$genre
- ";
写入:
- ////////////////////////////////
- $title = "生日快乐";
- $artist = "小S";
- $album = "旅程";
- $year = "2006";
- $comment = "这是我的第一个专辑哦!";
- //fseek($fp,1,SEEK_CUR); // reserve
- $track = "1";
- $genre = "4";
- // 规定字节,不足用\0补
- $title = str_pad( substr($title,0,30) ,30,chr(0));
- $artist = str_pad( substr($artist,0,30) ,30,chr(0));
- $album = str_pad( substr($album,0,30) ,30,chr(0));
- $year = str_pad( substr($year,0,4) ,4,chr(0));
- $comment = str_pad( substr($comment,0,28) ,28,chr(0));
- $track = chr(intval($track));
- $genre = chr(intval($genre));
- //
- $mp3 = substr(file_get_contents("srkl.mp3"),0,filesize(‘srkl.mp3′)-128);
- $fp = fopen("1.mp3","wb") or die("Unable open.");
- fwrite($fp,$mp3);
- fwrite($fp,"TAG");
- fwrite($fp,$title);
- fwrite($fp,$artist);
- fwrite($fp,$album);
- fwrite($fp,$year);
- fwrite($fp,$comment);
- fseek($fp,1,SEEK_CUR);
- fwrite($fp,$track);
- fwrite($fp,$genre);
- fclose($fp);
参考资料:
(来自CSDN)
关于Mp3文件的ID3v1标签的格式错误地方指正!首先非常感谢原作者,给我非常大的帮助,有误的地方我给予指正,望这能表达出我是对原作者的一些感谢!
原文地址:
http://dev.csdn.net/develop/article/14/14798.shtm
ID3V1比较简单,它是存放在MP3文件的末尾,用16进制的编辑器打开一个MP3文件,查看其末尾的128个顺序存放字节,数据结构定义如下:
char Header[3]; /*标签头必须是”TAG”否则认为没有标签*/
char Title[30]; /*标题*/
char Artist[30]; /*作者*/
char Album[30]; /*专集*/
char Year[4]; /*出品年代*/
char Comment[30]; /*备注*/
char Genre; /*类型*/
ID3V1的各项信息都是顺序存放,没有任何标识将其分开,比如标题信息不足30个字节,则使用’\0’补足,否则将造成信息错误。
结构应该是:
char Header[3]; /*标签头必须是”TAG”否则认为没有标签*/
char Title[30]; /*标题*/
char Artist[30]; /*作者*/
char Album[30]; /*专集*/
char Year[4]; /*出品年代*/
char Comment[29]; /*备注*/
byte track; /*音轨*/
byte Genre; /*类型*/
以上仅是个人看法,有误之处,还请指正!