•
MP3
的基本歌曲信息存在了
MP3
文件的最后
128
个字节里,
其结构是:
1 - 3TAG ( 标签 )
4 - 33 歌曲名 (TakeMe To Your Heart )
34 - 63 歌手名 (MichaelLearns to Rock)
64 - 93 专辑名 (TakeMe to Your Heart)
94 - 97 年份 (2004 )
98 - 125 备注 (http:// www.uptu.com )
126 保留位,这时为 0 ,则说明有音轨,下一位就是音轨
127 保留位,为音轨 ( 第几首歌 )(OC)
其结构是:
1 - 3TAG ( 标签 )
4 - 33 歌曲名 (TakeMe To Your Heart )
34 - 63 歌手名 (MichaelLearns to Rock)
64 - 93 专辑名 (TakeMe to Your Heart)
94 - 97 年份 (2004 )
98 - 125 备注 (http:// www.uptu.com )
126 保留位,这时为 0 ,则说明有音轨,下一位就是音轨
127 保留位,为音轨 ( 第几首歌 )(OC)
128 保留位(风格)(66)
我检测了一下平凡之路 但是出来的信息都是u,我用vim打开平凡之路也都是u。所以不明白是我的文件有问题还是我的做法有问题。有大神告诉我必胜感激!
#include <iostream>
#include <stdio.h>
#include <cstring>
#include <stdlib.h>
#include <string.h>
#include <math.h>
using namespace std;
enum a{ID3v1TAG_=3,YEAR_=4,MUSIC_NAME_=30,Artist_=30,Album_=30,Comments_=28,Genre_=1,Reserved_=1,Track_=1};
struct MUSIC_TITAL_INFO
{char ID3v1TAG[3+1]; //TAG
char MUSIC_NAME[30+1]; //存储标题信息
char Artist[30+1]; //存储歌手信息
char Album[30+1]; //存储专辑信息
char YEAR[4+1]; //存储年代信息
char Comments[28+1]; //存储备注信息,28个字节(有时为30字节)
char Genre; //存储音乐风格信息,保留位,1个字节
char Reserved; //保留位,1个字节(有时没有意思
char Track; //音轨(曲号)保留位,1个字节(有时没有)
}mp3;
void output(){
printf("ID3v1TAG :%s\n",mp3.ID3v1TAG);
printf("MUSIC_NAME :%s\n",mp3.MUSIC_NAME);
printf("Artist :%s\n",mp3.Artist);
printf("Album :%s\n",mp3.Album);
printf("YEAR :%s\n",mp3.YEAR);
printf("Comments :%s\n",mp3.Comments);
printf("Genre :%c\n",mp3.Genre);
printf("Reserved :%c\n",mp3.Reserved);
printf("Track :%c\n",mp3.Track);
}
int main(){
FILE *p;
if((p=fopen("/Users/lihao/Desktop/code/code/平凡之路.mp3","rb"))==NULL){
cout<<"no file!"<<endl;
}
fseek(p,0,SEEK_END);
fseek(p, -129, SEEK_END);
fread(mp3.ID3v1TAG, 1,ID3v1TAG_, p);
fread(mp3.MUSIC_NAME, 1,MUSIC_NAME_ , p);
fread(mp3.Artist, 1,Artist_ , p);
fread(mp3.Album, 1,Album_ , p);
fread(mp3.YEAR, 1,YEAR_, p);
fread(mp3.Comments, 1,Comments_, p);
fread(&mp3.Genre,1,Genre_,p);
fread(&mp3.Reserved,1,Reserved_,p);
fread(&mp3.Track,1,Track_,p);
output();
fclose(p);
}