id3lib无法读取相关信息,其实MP3中有ID3V1/ID3V2信息
在sourceforget中下载了id3lib源码,./configure时出错,根据网上人家说的改了一些东东,可以编绎安装成功,但是现在我用这个库来读取.mp3文件信息tag时,任何标记都读取不到?
但是有的.mp3文件可以读取,下面是代码,请指点!
<code>
#include "helun.h"
char * convert(char *p,int len,char *srccode,char *descode,int * returnlen)
{
char * pd;
size_t res;
char *t;//必需定义此字符指针,不能使用&pd
size_t lenin=len;
size_t lenout;
iconv_t ic=iconv_open(descode ,srccode);
*returnlen=0;
if(ic==(iconv_t)-1)
{
printf("Iconv_t Create Error\n");
return NULL;
}
lenout=len*6;
pd=(char *)malloc(lenout);
if(!pd)
{
printf("Malloc Fail\n");
return NULL;
}
t=pd;
memset(pd,0,lenout);
res=iconv(ic,&p,&lenin,&t,&lenout);
if(res==-1)
{
printf("Convert Fail\n");
free(pd);
return NULL;
}
*returnlen=len*6-lenout;
return pd;
}
void deal(info *res)
{
char gbk[4]="GBK";
char unicode[10]="UNICODE";
char *tmp;
char *t=NULL;
int len;
switch(res->encoding)
{
case 0://gbk
tmp=gbk;
if(*(res->title)!=0) {
t=convert(res->title,strlen(res->title),tmp,"UTF-8",&len);
memset(res->title,0,sizeof(res->title));
strcpy(res->title,t);
free(t);
}
if(*(res->album)!=0)
{
t=convert(res->album,strlen(res->album),tmp,"UTF-8",&len);
memset(res->album,0,sizeof(res->album));
strcpy(res->album,t);
free(t);
}
if(*(res->author)!=0)
{
t=convert(res->author,strlen(res->author),tmp,"UTF-8",&len);
memset(res->author,0,sizeof(res->author));
strcpy(res->author,t);
free(t);
}
if(*(res->comment)!=0)
{
t=convert(res->comment,strlen(res->comment),tmp,"UTF-8",&len);
memset(res->comment,0,sizeof(res->comment));
strcpy(res->comment,t);
free(t);
}
break;
case 6://unicode
tmp=unicode;
if(res->title) {
t=convert(res->title,strlen(res->title),tmp,"UTF-8",&len);
memset(res->title,0,sizeof(res->title));
strcpy(res->title,t);
free(t);
}
if(res->album)
{
t=convert(res->album,strlen(res->album),tmp,"UTF-8",&len);
memset(res->album,0,sizeof(res->album));
strcpy(res->album,t);
free(t);
}
if(res->author)
{
t=convert(res->author,strlen(res->author),tmp,"UTF-8",&len);
memset(res->author,0,sizeof(res->author));
strcpy(res->author,t);
free(t);
}
if(res->comment)
{
t=convert(res->comment,strlen(res->comment),tmp,"UTF-8",&len);
memset(res->comment,0,sizeof(res->comment));
strcpy(res->comment,t);
free(t);
}
break;
}
}
info * getinfo(char *path)
{
int i=0;
char str[1024];
int len;
int type=-10;
info *pres;
int frameid;
int fieldid;
char tmp[50]="not known";
ID3_Tag myTag;
ID3_Tag::Iterator* iter;
ID3_Frame::Iterator* iter1;
ID3_Field* myField;
ID3_Frame* myFrame;
myTag.Link(path,ID3TT_ALL);
pres=(info *)calloc(1,sizeof(info));
if(!pres)
{
printf("no mem \n");
return NULL;
}
iter = myTag.CreateIterator();
myFrame = NULL;
while (NULL != (myFrame = iter->GetNext()))
{
//printf("i=%d\n",i++);
iter1 = myFrame->CreateIterator();
if(!iter1)
continue;
myField = NULL;
frameid=myFrame->GetID();
while (NULL != (myField = iter1->GetNext()))
{
type=myField->GetEncoding();
if(type==-1)continue;
memset(str,0,1024);
myField->Get(str,1024);
fieldid=myField->GetID();
//printf("frameid=%d,field=%d,str=%s\n",myFrame->GetID(),myField->GetID(),str);
pres->encoding=type;
if(frameid==29&&fieldid==2)
{
strcpy(pres->album,str);
continue ;
}
if(frameid==61&&fieldid==2)
{
strcpy(pres->author,str);
continue;
}
if(frameid==47&&fieldid==2)
{
strcpy(pres->title,str);
continue ;
}
if(frameid==68&&fieldid==2)
{
strcpy(pres->track,str);
continue ;
}
if(frameid==32&&fieldid==2)
{
strcpy(pres->gener,str);
continue;
}
if(frameid==80&&fieldid==2)
{
strcpy(pres->year,str);
continue ;
}
if(frameid==4&&fieldid==2)
{
strcpy(pres->comment,str);
continue ;
}
}
delete iter1;
}
delete iter;
return pres;
}
void showinfo(info * res)
{
if(!res)
return ;
printf("encoding============%d\n",res->encoding);
printf("title===============%s\n",res->title);
printf("author==============%s\n",res->author);
printf("album===============%s\n",res->album);
printf("year================%s\n",res->year);
printf("track===============%s\n",res->track);
printf("comment=============%s\n",res->comment);
printf("gener===============%s\n",res->gener);
}
int main()
{
info * res;
res=getinfo("/root/c++/test/梦醒了.mp3");
deal(res);
if(res)
{
showinfo(res);
}
return 0;
}
</code>
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
![扫码二维码加入Web技术交流群](/public/img/jiaqun_03.jpg)
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论