资源简介
读取MP3问文件ID3v2,ID3v2,APEv2标签的程序,上传之与大家交流。
代码片段和文件信息
/**
* 文 件 名:APEV2Tag.c
* 功 能:媒体文件APEV2标签信息提取函数和打印函数的实现
* 创建日期:2009年05月10日
* 最新日期:2009年05月10日
* 程序编码:huanying
*/
#include “APEV2Tag.h“
/* get_APEv2Tag_info:读取目标文件的APEv2标签信息,成功返回0否从返回-1 */
int get_APEv2Tag_info(FILE *fp APEv2Item *header int tagflag int ID3v2Size)
{
int c;
int i;
int item_num;
int item_size;
long tag_size;
APEv2HF HF_st;
APEv2Item *p1 = NULL *p2 = NULL;
if (NULL == fp)
{
printf(“File stream‘s pointer is NULL!\n“);
return -1;
}
if (NULL == fp)
{
printf(“APEv2HF‘s pointeris NULL!\n“);
return -1;
}
/* 从文件尾部开始搜寻APEv2标签标签尾 */
if (tagflag == 1 || tagflag == 3)
fseek(fp -(128L + 32L) SEEK_END);
else
fseek(fp -32L SEEK_END);
fread(&HF_st sizeof(APEv2HF) 1 fp);
if (0 == strncmp(HF_st.preamble “APETAGEX“ 8))
{
printf(“This medium has APEv2Tag footer!\n“);
tag_size = ((HF_st.tagsize)[3] << 24) |
((HF_st.tagsize)[2] << 16) |
((HF_st.tagsize)[1] << 8) |
(HF_st.tagsize)[0];
item_num = ((HF_st.itemcount)[3] << 24) |
((HF_st.itemcount)[2] << 16) |
((HF_st.itemcount)[1] << 8) |
(HF_st.itemcount)[0];
if (tagflag == 1 || tagflag == 3)
fseek(fp -(128L + tag_size) SEEK_END);
else
fseek(fp -tag_size SEEK_END);
//printf(“TagSize:%ld\t“ tag_size);
//printf(“Itemcount:%d\n“ item_num);
}
else
{
/* 从文件头部开始搜寻APEv2标签标签头 */
if (tagflag == 2 || tagflag == 3) /* 判断是否有ID3v2标签 */
fseek(fp ID3v2Size SEEK_SET);
else
fseek(fp 0L SEEK_SET);
fread(&HF_st sizeof(APEv2HF) 1 fp);
if (0 == strncmp(HF_st.preamble “APETAGEX“ 8))
{
printf(“This medium has APEv2Tag header!\n“);
tagflag += HAS_APEv2;
tag_size = ((HF_st.tagsize)[3] << 24) |
((HF_st.tagsize)[2] << 16) |
((HF_st.tagsize)[1] << 8) |
(HF_st.tagsize)[0];
item_num = ((HF_st.itemcount)[3] << 24) |
((HF_st.itemcount)[2] << 16) |
((HF_st.itemcount)[1] << 8) |
(HF_st.itemcount)[0];
if (tagflag == 2 || tagflag == 3) /* 判断是否有ID3v2标签 */
fseek(fp ID3v2Size + 32L SEEK_SET);
else
fseek(fp 32L SEEK_SET);
//printf(“TagSize:%ld\t“ tag_size);
//printf(“Itemcount:%d\n“ item_num);
}
else
{
printf(“This medium has not APEv2Tag!\n“);
return -1;
}
}/* end of else */
/* 头结点不存储信息 */
p2 = header;
/* 搜寻标签元素中的关键字和其对应的值 */
for (i=0; i {
if ( NULL == (p1 = (APEv2Item *)malloc(sizeof(APEv2Item))) )
{
perror(“Memory allocate for item error“);
exit(-1);
}
fread(p1->itemvaluesize 4 1 fp);
fread(p1->itemflags 4 1 fp);
item_size = ((p1->itemvaluesize)[3] << 24) |
((p1->itemvaluesize)[2] << 16) |
((p1->itemvaluesize)[1] << 8) |
(p1->itemvaluesize)[0];
/* 当标签元素的大小为负的时候,表示提取APEv2标签元素有问题,终止提取 */
if (item_size < 0)
{
break;
}
//printf(“(%2d)ItemFla
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 4668 2009-05-21 10:08 tag\APEV2Tag.c
文件 1490 2009-05-21 10:08 tag\APEV2Tag.h
文件 756 2009-05-21 10:08 tag\common.c
文件 270 2009-05-21 10:08 tag\common.h
文件 2062 2009-05-21 10:08 tag\cpmain.c
文件 409 2009-05-21 10:09 tag\define.h
文件 1694 2009-05-21 10:09 tag\ID3V1Tag.c
文件 1080 2009-05-21 10:09 tag\ID3V1Tag.h
文件 4499 2009-05-21 10:09 tag\ID3V2Tag.c
文件 1600 2009-05-21 10:09 tag\ID3V2Tag.h
文件 492 2009-05-21 10:18 tag\makefile
文件 254 2009-05-21 10:22 tag\readme.txt
目录 0 2009-05-21 10:16 tag
----------- --------- ---------- ----- ----
19274 13
- 上一篇:ReportMachine 交叉报表 学生成绩表
- 下一篇:没有了
相关资源
- 课程作业:模拟仓库管理系统
- 操作系统实验——虚存管理实验
- linux下的发包工具sendip
- 尚观培训linux许巍关于c 的笔记和讲义
- 尚观培训linux董亮老师关于数据结构的
- linux 线程池源码 c 版
- linux C 电梯程序练习
- linux下用多进程同步方法解决生产者
- 一个简单实用个人日记管理系统
- 带时间温度显示的室内灯光控制系统
- 成绩管理系统(数据结构)
- Linux 操作系统实验(全)
- Linux From Scratch 中文手册
- FIR低通滤波器 ccs运行环境
- linux 网络实验 ftp程序
- Linux命令大全离线版&在线版
- 操作系统共享内存实验
- dos 下运行Linux 命令--gnu_utils
- linux 0.12内核源代码
- linux简易shell C实现
- linux实验报告及心得体会
- 基于GTK的Linux环境下的简易任务管理器
- linux扫雷游戏代码
- CAN Linux驱动代码
- Linux系统教材
- intel 82579LM 网卡驱动Linux系统版 v1.9.
- SA1110处理器掌上电脑液晶显示器设计
- 基于Linux的串口服务器设计
- Windows下访问LINUX的利器-SSH
- Linux操作系统课件PPT
评论
共有 条评论