C语言读MP3 的id tag,算出播放时间,账长!

这段代码展示了如何使用C语言读取MP3文件的ID3v2和ID3v1标签,并计算播放时长。通过读取文件头部信息,解析帧头以获取比特率、采样率等关键数据,从而计算出总的播放时间。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/*这是修改后的代码,VC下读ID3v2   &   ID3v1   ,   读mp3_tagHeader都没问题.*/  
   
  /******************************************************************  
  File   :   mp3info.c  
  *******************************************************************************/  
   
  #include<stdio.h>  
  #include<io.h>  
  #include<string.h>  
  #include<stdlib.h>  


  #define SEEK_END 2   
  /*******************************************************************************/  
   
  void   main()  
  {  
  FILE   *fp;  
  int   bHasID3V2;  
  char   cVer;  
  char   cRevision;  
  int   bHasExtHeader=0;  
  int   ID3V2_size;  
  #define   ID3V1_size     128  
  char   cID3V2_head[10];  
  char   cID3v2Frame_head[10];  
  char   *cID3v2Frame;  
  long     iID3v2Frame_length;  
   
  /*##########################Symbol   In   Frame###################################*/  
   
  long   iFrameStart,iFrameMove=0,   iFrameCount=0;  
  unsigned   long   iFrameSize=0;  
  char   cFrameHead_bin[33];  
  char   cFrameHead_bin_temp[9];  
   
  /*##########################Symbol   In   ID3V1###################################*/  
   
  char   cID3V1[128];  
   
  /*##########################Symbol   Above######################################*/  
  unsigned   char*   cBuffer;  
  int   SamplingrateTable   [3][3]={ {44100,22050,11025},{48000,24000,120000},{32000,16000,8000}};    
  char*   ChannelDescrip[4]={"立体声","混合立体声","双声","单声"};  
   
  int     cBuffer_size=1024,Bitrate,FrameSize,FrameCount,mp3Duration;  
  char   LayerDescript   ,bRateIndex   ,bSampleRate,Version,bPadding,bChannelMode;  
  long   int   flength;  
   
  int   i=0,j=0;    
  char   argv[]={"1.mp3"};  
   
  /*##########################Symbol   Above######################################*/  
   
  void   getBin(   int   ,char*   );  
  int   GetBitRate(int   ,int   ,   int   ); //函数宣告  
   
  if((fp=fopen(argv,"rb"))==NULL)  
  {  
  printf("ERROR:can't   open   the   file!");  
  getchar();  
  exit(1);  
  }  
   
  /*##########################ID3V2   Reading#####################################*/  
   
  fread(cID3V2_head,10,1,fp);  

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值