c语言程序设计MP3或MP4文件基本信息的解析
任意选择一首MP3歌曲文件,要求解析出该歌曲文件,要求解析出该歌曲文件,要求解析出该歌曲文件,要求解析出该歌曲文件,要求解析出该歌曲文件,要求解析出该MP3文件头部和尾的...
任意选择一首 MP3 歌曲文件,要求解析出该 歌曲文件,要求解析出该 歌曲文件,要求解析出该 歌曲文件,要求解析出该 歌曲文件,要求解析出该 歌曲文件,要求解析出该 MP3 文件头部和尾的所有信息(如歌手名、 文件头部和尾的所有信息(如歌手名、 歌曲名、专辑年份播放时长等), 歌曲名、专辑年份播放时长等), 并显示出这些信息 。
MP3 的文件头长 10Byte ,主要保存 ID3 ,ID3 ID3版本和副信息,以及 Flag Flag和帧长的信 息;尾部的 128 字节保存了 Header( 尾部头, 3Byte) ,Title( 歌曲名称, 30B yte) ,Arti st( 艺 术家, 30Byte) ,Album( 专辑, 30Byte) ,Year( 发行年份, 4Byte) ,Comment( 评论, 30Byte) , Genre( 类型 ,1Byte) 。3+30+4+1=128
提示:请先查阅 MP3 或 MP4 文件格式 相关的资料。 如果有两个同学做此题目,则 一个同 学解析 MP3 ,另外一个同学解析 MP4 。
求代码,求代码的解释,我们要答辩的啊,各位大神啊,救救我吧,有追加分的。
请教一下tag_ID3_INFO我编译的时候为什么出错 展开
MP3 的文件头长 10Byte ,主要保存 ID3 ,ID3 ID3版本和副信息,以及 Flag Flag和帧长的信 息;尾部的 128 字节保存了 Header( 尾部头, 3Byte) ,Title( 歌曲名称, 30B yte) ,Arti st( 艺 术家, 30Byte) ,Album( 专辑, 30Byte) ,Year( 发行年份, 4Byte) ,Comment( 评论, 30Byte) , Genre( 类型 ,1Byte) 。3+30+4+1=128
提示:请先查阅 MP3 或 MP4 文件格式 相关的资料。 如果有两个同学做此题目,则 一个同 学解析 MP3 ,另外一个同学解析 MP4 。
求代码,求代码的解释,我们要答辩的啊,各位大神啊,救救我吧,有追加分的。
请教一下tag_ID3_INFO我编译的时候为什么出错 展开
3个回答
展开全部
找了个MP3看了下,comment是29个字节。
可参考 http://www.chineselinuxuniversity.net/articles/27374.shtml
拿VC的C语言写了下:
头文件:
#include <stdio.h>
// TODO: reference additional headers your program requires here
#define MP3_ID3_LENGTH 10
typedef struct tag_ID3_INFO
{
} ID3_INFO;
#define IDENTIFY_LEN 3
#define TITLE_LEN 30
#define ARTIST_LEN 30
#define ALBUM_LEN 30
#define YEAR_LEN 4
#define COMMENT_LEN 30
#define GENRE_LEN 1
// IDENTIFY_LEN + TITLE_LEN +...
#define MP3_INFO_LENGTH 128
typedef struct tag_MP3_INFO
{
char Identify[IDENTIFY_LEN + 1]; //TAG三个字母
//这里可以用来鉴别是不是文件信息内容
char Title[TITLE_LEN + 1]; //歌曲名,30个字节
char Artist[ARTIST_LEN + 1]; //歌手名,30个字节
char Album[ARTIST_LEN + 1]; //所属唱片,30个字节
char Year[YEAR_LEN + 1]; //年,4个字节
char Comment[COMMENT_LEN + 1]; //注释,28个字节
char Genre[GENRE_LEN + 1]; //类型 ,1个字节
} MP3_INFO;
C文件:
#include <string.h>
#define MP3_OK 1
#define MP3_ERROR 1
FILE *OpenMp3File(char *pFileName);
int ReadMP3Info(FILE *pFile, MP3_INFO *pstInfo);
int OutputMP3Info(MP3_INFO *pstMp3Info);
int main(int argc, char* argv[])
{
FILE *pFile = NULL;
MP3_INFO stMp3Info = {0};
char *pfname = "E:\\Project\\MP3\\test.MP3";
pFile = OpenMp3File(pfname);
if (NULL == pFile)
{
return MP3_ERROR;
}
ReadMP3Info(pFile, &stMp3Info);
printf("\r\nMP3 file: %s", pfname);
OutputMP3Info(&stMp3Info);
printf("Hello World!\n");
return MP3_OK;
}
FILE *OpenMp3File(char *pFileName)
{
FILE *pFile = NULL;
pFile = fopen(pFileName,"rb");
if (NULL==pFile)
{
printf("open read file error!!");
return NULL;
}
return pFile;
}
int ReadMP3Info(FILE *pFile, MP3_INFO *pstInfo)
{
int len = 0;
if ((NULL == pFile) || (NULL == pstInfo))
{
return MP3_ERROR;
}
fseek(pFile, 0, SEEK_END);
len = ftell(pFile);
if (len <= (MP3_INFO_LENGTH + MP3_ID3_LENGTH))
{
return MP3_ERROR;
}
memset(pstInfo, 0, sizeof(MP3_INFO));
fseek(pFile, -MP3_INFO_LENGTH, SEEK_END);
len = fread((char *)(pstInfo->Identify), 1, IDENTIFY_LEN, pFile);
len += fread((char *)(pstInfo->Title), 1, TITLE_LEN, pFile);
len += fread((char *)(pstInfo->Artist), 1, ARTIST_LEN, pFile);
len += fread((char *)(pstInfo->Album), 1, ALBUM_LEN, pFile);
len += fread((char *)(pstInfo->Year), 1, YEAR_LEN, pFile);
len += fread((char *)(pstInfo->Comment), 1, COMMENT_LEN, pFile);
len += fread((char *)(pstInfo->Genre), 1, GENRE_LEN, pFile);
if (MP3_INFO_LENGTH != len)
{
return MP3_ERROR;
}
return MP3_OK;
}
int OutputMP3Info(MP3_INFO *pstMp3Info)
{
printf("\r\nTag : %s", pstMp3Info->Identify);
printf("\r\nTitle : %s", pstMp3Info->Title);
printf("\r\nArtist : %s", pstMp3Info->Artist);
printf("\r\nAlbum : %s", pstMp3Info->Album);
printf("\r\nYear : %s", pstMp3Info->Year);
printf("\r\nComment: %s", pstMp3Info->Comment);
return MP3_OK;
}
测试:
MP3 file: E:\Project\MP3\test.MP3
Tag : TAG
Title : TrackTitle
Artist : ArtistName
Album : AlbumTitle
Year : 2012
Comment: This is a comment
可参考 http://www.chineselinuxuniversity.net/articles/27374.shtml
拿VC的C语言写了下:
头文件:
#include <stdio.h>
// TODO: reference additional headers your program requires here
#define MP3_ID3_LENGTH 10
typedef struct tag_ID3_INFO
{
} ID3_INFO;
#define IDENTIFY_LEN 3
#define TITLE_LEN 30
#define ARTIST_LEN 30
#define ALBUM_LEN 30
#define YEAR_LEN 4
#define COMMENT_LEN 30
#define GENRE_LEN 1
// IDENTIFY_LEN + TITLE_LEN +...
#define MP3_INFO_LENGTH 128
typedef struct tag_MP3_INFO
{
char Identify[IDENTIFY_LEN + 1]; //TAG三个字母
//这里可以用来鉴别是不是文件信息内容
char Title[TITLE_LEN + 1]; //歌曲名,30个字节
char Artist[ARTIST_LEN + 1]; //歌手名,30个字节
char Album[ARTIST_LEN + 1]; //所属唱片,30个字节
char Year[YEAR_LEN + 1]; //年,4个字节
char Comment[COMMENT_LEN + 1]; //注释,28个字节
char Genre[GENRE_LEN + 1]; //类型 ,1个字节
} MP3_INFO;
C文件:
#include <string.h>
#define MP3_OK 1
#define MP3_ERROR 1
FILE *OpenMp3File(char *pFileName);
int ReadMP3Info(FILE *pFile, MP3_INFO *pstInfo);
int OutputMP3Info(MP3_INFO *pstMp3Info);
int main(int argc, char* argv[])
{
FILE *pFile = NULL;
MP3_INFO stMp3Info = {0};
char *pfname = "E:\\Project\\MP3\\test.MP3";
pFile = OpenMp3File(pfname);
if (NULL == pFile)
{
return MP3_ERROR;
}
ReadMP3Info(pFile, &stMp3Info);
printf("\r\nMP3 file: %s", pfname);
OutputMP3Info(&stMp3Info);
printf("Hello World!\n");
return MP3_OK;
}
FILE *OpenMp3File(char *pFileName)
{
FILE *pFile = NULL;
pFile = fopen(pFileName,"rb");
if (NULL==pFile)
{
printf("open read file error!!");
return NULL;
}
return pFile;
}
int ReadMP3Info(FILE *pFile, MP3_INFO *pstInfo)
{
int len = 0;
if ((NULL == pFile) || (NULL == pstInfo))
{
return MP3_ERROR;
}
fseek(pFile, 0, SEEK_END);
len = ftell(pFile);
if (len <= (MP3_INFO_LENGTH + MP3_ID3_LENGTH))
{
return MP3_ERROR;
}
memset(pstInfo, 0, sizeof(MP3_INFO));
fseek(pFile, -MP3_INFO_LENGTH, SEEK_END);
len = fread((char *)(pstInfo->Identify), 1, IDENTIFY_LEN, pFile);
len += fread((char *)(pstInfo->Title), 1, TITLE_LEN, pFile);
len += fread((char *)(pstInfo->Artist), 1, ARTIST_LEN, pFile);
len += fread((char *)(pstInfo->Album), 1, ALBUM_LEN, pFile);
len += fread((char *)(pstInfo->Year), 1, YEAR_LEN, pFile);
len += fread((char *)(pstInfo->Comment), 1, COMMENT_LEN, pFile);
len += fread((char *)(pstInfo->Genre), 1, GENRE_LEN, pFile);
if (MP3_INFO_LENGTH != len)
{
return MP3_ERROR;
}
return MP3_OK;
}
int OutputMP3Info(MP3_INFO *pstMp3Info)
{
printf("\r\nTag : %s", pstMp3Info->Identify);
printf("\r\nTitle : %s", pstMp3Info->Title);
printf("\r\nArtist : %s", pstMp3Info->Artist);
printf("\r\nAlbum : %s", pstMp3Info->Album);
printf("\r\nYear : %s", pstMp3Info->Year);
printf("\r\nComment: %s", pstMp3Info->Comment);
return MP3_OK;
}
测试:
MP3 file: E:\Project\MP3\test.MP3
Tag : TAG
Title : TrackTitle
Artist : ArtistName
Album : AlbumTitle
Year : 2012
Comment: This is a comment
展开全部
C文件:
#include <string.h>
#define MP3_OK 1
#define MP3_ERROR 1
FILE *OpenMp3File(char *pFileName);
int ReadMP3Info(FILE *pFile, MP3_INFO *pstInfo);
int OutputMP3Info(MP3_INFO *pstMp3Info);
int main(int argc, char* argv[])
{
FILE *pFile = NULL;
MP3_INFO stMp3Info = {0};
char *pfname = "E:\\Project\\MP3\\test.MP3";
pFile = OpenMp3File(pfname);
if (NULL == pFile)
{
return MP3_ERROR;
}
ReadMP3Info(pFile, &stMp3Info);
printf("\r\nMP3 file: %s", pfname);
OutputMP3Info(&stMp3Info);
printf("Hello World!\n");
return MP3_OK;
}
FILE *OpenMp3File(char *pFileName)
{
FILE *pFile = NULL;
pFile = fopen(pFileName,"rb");
if (NULL==pFile)
{
printf("open read file error!!");
return NULL;
}
return pFile;
}
int ReadMP3Info(FILE *pFile, MP3_INFO *pstInfo)
{
int len = 0;
if ((NULL == pFile) || (NULL == pstInfo))
{
return MP3_ERROR;
}
#include <string.h>
#define MP3_OK 1
#define MP3_ERROR 1
FILE *OpenMp3File(char *pFileName);
int ReadMP3Info(FILE *pFile, MP3_INFO *pstInfo);
int OutputMP3Info(MP3_INFO *pstMp3Info);
int main(int argc, char* argv[])
{
FILE *pFile = NULL;
MP3_INFO stMp3Info = {0};
char *pfname = "E:\\Project\\MP3\\test.MP3";
pFile = OpenMp3File(pfname);
if (NULL == pFile)
{
return MP3_ERROR;
}
ReadMP3Info(pFile, &stMp3Info);
printf("\r\nMP3 file: %s", pfname);
OutputMP3Info(&stMp3Info);
printf("Hello World!\n");
return MP3_OK;
}
FILE *OpenMp3File(char *pFileName)
{
FILE *pFile = NULL;
pFile = fopen(pFileName,"rb");
if (NULL==pFile)
{
printf("open read file error!!");
return NULL;
}
return pFile;
}
int ReadMP3Info(FILE *pFile, MP3_INFO *pstInfo)
{
int len = 0;
if ((NULL == pFile) || (NULL == pstInfo))
{
return MP3_ERROR;
}
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2012-05-25
展开全部
先把某个mp3文件用 winhex 程序解析出来
然后开始自己慢慢研究,你会有收获的。
然后开始自己慢慢研究,你会有收获的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询