mp3信息检查

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)

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);
    
}



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值