解析本地音乐文件
2018-03-08 08:55
309 查看
一首音乐的后128字节保留了信息,前3个字节用于识别是否是音乐,接着31个字节存储歌曲名,再接31个字节是歌手名,再接31个字节是唱片名,然后5个字节是年份,29个字节是注释,最后3个字节作为保留位。
所以用C语言代码如下#include<iostream>
using namespace std;
typedef struct _MP3INFO //MP3信息的结构
{
char Identify[3]; //TAG三个字母
//这里可以用来鉴别是不是文件信息内容
char Title[31]; //歌曲名,30个字节
char Artist[31]; //歌手名,30个字节
char Album[31]; //所属唱片,30个字节
char Year[5]; //年,4个字节
char Comment[29]; //注释,28个字节
unsigned char reserved; //保留位, 1个字节
unsigned char reserved2; //保留位,1个字节
unsigned char reserved3; //保留位,1个字节
} MP3INFO;
bool GetInfo(char *filePath)
{
// QTextCodec::setCodecForLocale(QTextCodec::codecForName("gbk"));
FILE * fp;
unsigned char mp3tag[128] = { 0 };
MP3INFO mp3info;
fp = fopen(filePath, "rb");
if (NULL == fp)
{
cout << "打开文件失败" << endl;
return false;
}
fseek(fp, -128, SEEK_END);
fread(&mp3tag, 1, 128, fp);
if (!((mp3tag[0] == 'T' || mp3tag[0] == 't')
&& (mp3tag[1] == 'A' || mp3tag[1] == 'a')
&& (mp3tag[2] == 'G' || mp3tag[0] == 'g')))
{
fclose(fp);
cout<< "解析当前文件失败"<<endl;
return false;
}
//获取Mp3信息
memcpy((void *)mp3info.Identify, mp3tag, 3); //获得tag
memcpy((void *)mp3info.Title, mp3tag + 3, 30); //获得歌名
memcpy((void *)mp3info.Artist, mp3tag + 33, 30); //获得作者
memcpy((void *)mp3info.Album, mp3tag + 63, 30); //获得唱片名
memcpy((void *)mp3info.Year, mp3tag + 93, 4); //获得年
memcpy((void *)mp3info.Comment, mp3tag + 97, 28); //获得注释
memcpy((void *)&mp3info.reserved, mp3tag + 125, 1); //获得保留
memcpy((void *)&mp3info.reserved2, mp3tag + 126, 1);
memcpy((void *)&mp3info.reserved3, mp3tag + 127, 1);
fclose(fp);
cout << "Title:" << mp3info.Title << endl;
cout << "Artist:" << mp3info.Artist << endl;
cout << "Album:" << mp3info.Album << endl;
cout << "Year:" << mp3info.Year << endl;
cout << "Comment:" << mp3info.Comment << endl;
return true;
}
int main()
{
GetInfo("D:\\2.mp3");
system("pause");
}
所以用C语言代码如下#include<iostream>
using namespace std;
typedef struct _MP3INFO //MP3信息的结构
{
char Identify[3]; //TAG三个字母
//这里可以用来鉴别是不是文件信息内容
char Title[31]; //歌曲名,30个字节
char Artist[31]; //歌手名,30个字节
char Album[31]; //所属唱片,30个字节
char Year[5]; //年,4个字节
char Comment[29]; //注释,28个字节
unsigned char reserved; //保留位, 1个字节
unsigned char reserved2; //保留位,1个字节
unsigned char reserved3; //保留位,1个字节
} MP3INFO;
bool GetInfo(char *filePath)
{
// QTextCodec::setCodecForLocale(QTextCodec::codecForName("gbk"));
FILE * fp;
unsigned char mp3tag[128] = { 0 };
MP3INFO mp3info;
fp = fopen(filePath, "rb");
if (NULL == fp)
{
cout << "打开文件失败" << endl;
return false;
}
fseek(fp, -128, SEEK_END);
fread(&mp3tag, 1, 128, fp);
if (!((mp3tag[0] == 'T' || mp3tag[0] == 't')
&& (mp3tag[1] == 'A' || mp3tag[1] == 'a')
&& (mp3tag[2] == 'G' || mp3tag[0] == 'g')))
{
fclose(fp);
cout<< "解析当前文件失败"<<endl;
return false;
}
//获取Mp3信息
memcpy((void *)mp3info.Identify, mp3tag, 3); //获得tag
memcpy((void *)mp3info.Title, mp3tag + 3, 30); //获得歌名
memcpy((void *)mp3info.Artist, mp3tag + 33, 30); //获得作者
memcpy((void *)mp3info.Album, mp3tag + 63, 30); //获得唱片名
memcpy((void *)mp3info.Year, mp3tag + 93, 4); //获得年
memcpy((void *)mp3info.Comment, mp3tag + 97, 28); //获得注释
memcpy((void *)&mp3info.reserved, mp3tag + 125, 1); //获得保留
memcpy((void *)&mp3info.reserved2, mp3tag + 126, 1);
memcpy((void *)&mp3info.reserved3, mp3tag + 127, 1);
fclose(fp);
cout << "Title:" << mp3info.Title << endl;
cout << "Artist:" << mp3info.Artist << endl;
cout << "Album:" << mp3info.Album << endl;
cout << "Year:" << mp3info.Year << endl;
cout << "Comment:" << mp3info.Comment << endl;
return true;
}
int main()
{
GetInfo("D:\\2.mp3");
system("pause");
}
相关文章推荐
- js本地解析xls文件
- IOS学习 网络NSURLSession JSON文件解析、本地服务器启动、MAC混编
- VWD内建Web服务器无法解析本地Flash文件[Bug]
- Swift - 读取/解析本地文件
- Android开发本地及网络Mp3音乐播放器(十一)使用Jsoup组件请求网络,并解析音乐数据
- JavaScript解析lrc文件音乐歌词
- 关于iOS获取音乐库的音乐信息 (获取本地音乐文件)
- Android--MediaPlayer(实现列表选歌,上一首,下一首,清空播放列表,搜索本地音乐文件)
- Cursor扫描本地音乐文件,英文名也出现乱码,怎么解决。
- Objective-C XML本地文件解析
- iOS获取本地音乐文件
- swift:使用第三方开源库SwiftyJSON解析本地json数据文件
- XML_DOM_解析本地文件
- ios 简单的本地json格式文件解析
- win7基础 hosts 本地的DNS解析文件
- ios获取本地音乐库音乐很详细 扫描IPHONE本地音乐文件,获得音乐名,歌手名代码示例
- Ajax 解析本地json文件
- Android开发本地及网络Mp3音乐播放器(十一)使用Jsoup组件请求网络,并解析音乐数据
- JavaScript解析lrc文件音乐歌词
- Android中音乐文件的信息详解【安卓源码解析二】