⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 id3_rock.c

📁 瑞芯微RK2608固件源代码
💻 C
字号:
#include "Mp3DecodeGlobal.h"
#include "MP3DecodeStruct.h"
#include "Global.h"
#include "Config.h"

#define Word32  long
#define Word16  short

__attribute__((section(".mp3_text,\"ax\"")))
void Find_ID3_TAG(ID3_TAG *id3_info,Word16 *Buffer)
{

	Word16 j=0;
	Word16 m=0;
	Word16 i=10;
	Word16 k=0;
	Word16 h=0;

	Word32 title_size=0, singer_size=0, album_size=0,liupai_size=0,min_size=0;
	Word16 id3_find_mode=0xff;
	Word16 id3_find_status=0,num=0;
	Word16 id3_pic_status=0;
	Word16 image_size;

	
	for(j=0; j<ID3_TAG_SIZE; j++) id3_info->id3_title[j] = 0x00;
	for(j=0; j<ID3_TAG_SIZE; j++) id3_info->id3_singer[j] = 0x00;
	for(j=0; j<ID3_TAG_SIZE; j++) id3_info->id3_album[j] = 0x00;
    for(j=0; j<ID3_GENREN_INFO;j++) id3_info->id3_genren_info[j]=0x00;  //zyz 20060223
    //for(j=0; j<ID3_GENREN_INFO;j++) id3_info->id3_genren_info[ID3_GENREN_INFO]=0x00;
  
	id3_info->id3_title_size=0;
	id3_info->id3_singer_size=0;
	id3_info->id3_album_size=0;

	id3_info->id3_ver = 0xff;
    id3_info->id3_check = 0x00; //0 is right ,else is null
 

	j=0;
  //??4096????????BUFFER??
	if(Buffer[0]=='I' && Buffer[1]=='D' && Buffer[2]=='3')
	{
	
	    id3_info->id3_size = (((Word32)Buffer[6]&0x7F)<<21)+(((Word32)Buffer[7]&0x7F)<<10)+(((Word32)Buffer[8]&0x7F)<<7)+((Word32)Buffer[9]&0x7F);	
		id3_info->id3_ver = Buffer[3];
	 
		min_size=id3_info->id3_size; 
        if(id3_info->id3_size>ID3_V2_INBUFFER_SIZE) min_size=ID3_V2_INBUFFER_SIZE;


        if(id3_info->id3_size)
				for(; i<min_size; i++){
					switch(k)
					{
						case 0:
							if(Buffer[i]=='T') {k=1;}							
							break;
						case 1:
							if(Buffer[i]=='P') {k=2; id3_find_mode=0;}		//singer
		 				    else if(Buffer[i]=='I') {k=2; id3_find_mode=1;}	//title
							else if(Buffer[i]=='A') {k=2; id3_find_mode=2;}	//album
							else if(Buffer[i]=='C') {k=6;}
							else k=0;
							break;
						case 2:
							if(id3_find_mode==0){		//singer
								if(Buffer[i]=='E'){k=3;}
								else k=0;
							}
							else if(id3_find_mode==1){	//title
								if(Buffer[i]=='T'){k=3;}
								else k=0;
							}
							else if(id3_find_mode==2){	//album
								if(Buffer[i]=='L'){k=3;}
								else k=0;
							}
							else k=0;
							break;
						case 3:
							if(id3_find_mode==0){		//singer
								if((Buffer[i]>0x30) && (Buffer[i]<0x35)){k=4; h=0;}
								else k=0;
							}
							else if(id3_find_mode==1){	//title
								if((Buffer[i]>0x30) && (Buffer[i]<0x34)){k=4; h=0;}
								else k=0;
							}
							else if(id3_find_mode==2){	//album
								if(Buffer[i]=='B'){k=4; h=0;}
								else k=0;
							}
							else k=0;
							break;
						case 4:
							if(id3_find_mode==0){		//singer
								if(h<4) singer_size +=(Word32) Buffer[i]<<(24-(h<<3));
								h++;
								if(h==7) {
									if(singer_size>1) {
									k=5;
									singer_size--;
									if(singer_size>ID3_TAG_SIZE) singer_size = ID3_TAG_SIZE-1;
									h=0;
									}
									else {h=0; k=0;}
								}
							}
							else if(id3_find_mode==1){	//title
								if(h<4) title_size+=(Word32) Buffer[i]<<(24-(h<<3));
								h++;
								if(h==7) {
									if(title_size>1) {
									k=5;
									title_size--;
									if(title_size>ID3_TAG_SIZE) title_size = ID3_TAG_SIZE-1;
									h=0;
									}
									else {h=0; k=0;} 
								}
							}
							else if(id3_find_mode==2){	//album
								if(h<4) album_size +=(Word32) Buffer[i]<<(24-(h<<3));
								h++;
								if(h==7) {
									if(album_size>1) {
										k=5;
										album_size--;
										if(album_size>ID3_TAG_SIZE) album_size = ID3_TAG_SIZE-1;
										h=0;
									}
									else {h=0; k=0;}
								}
							}
							break;
						case 5:
							if(id3_find_mode==0){		//singer
								id3_info->id3_singer[h]= Buffer[i];
								h++;

								if(singer_size==h) {
									id3_info->id3_singer_size=singer_size;
									id3_find_status++;

									if(id3_find_status==4);
									else {h=0; k=0;}
								}
							}
							else if(id3_find_mode==1){	//title
								id3_info->id3_title[h] = Buffer[i];
								h++;

								if(title_size==h) {
									id3_info->id3_title_size = title_size;
									id3_find_status++;
									if(id3_find_status==4) ;
									else {h=0; k=0;}
								}
							}
							else if(id3_find_mode==2){	//album
								id3_info->id3_album[h] = Buffer[i];
								h++;

								if(album_size==h) {
									id3_info->id3_album_size = album_size;
									id3_find_status++;
									if(id3_find_status==4) ;
									else {h=0; k=0;}
								}
							}

							break;						
						case 6:
						      if(Buffer[i]=='O') {k=7;}
						      else k=0;
						      break;
						case 7:
						      if(Buffer[i]=='N'){k=8;h=0;}
						      else k=0;
						      break;
						case 8:
						      if(h<4) liupai_size +=(Word32) Buffer[i]<<(24-(h<<3));
								h++;
								if(h==7) {
									if(liupai_size>1) {
										k=9;
										liupai_size--;
										if(liupai_size>ID3_TAG_SIZE) liupai_size = ID3_TAG_SIZE-1;
										h=0;
									}
									else {h=0; k=0;}
								}
						      break;
                         case 9:
                               id3_info->id3_genren_info[h] = Buffer[i];
								h++;

								if(liupai_size==h) {								
									id3_find_status++;
                                        if(liupai_size>2&&liupai_size<6)
                                        {
                                             liupai_size-=2;
                                             if(liupai_size==1)
                                                  num=(id3_info->id3_genren_info[1]-48);
                                             else if(liupai_size==2)
                                                  num=(id3_info->id3_genren_info[1]-48)*10+(id3_info->id3_genren_info[2]-48);
                                             else if(liupai_size==3)
                                                  num=(id3_info->id3_genren_info[1]-48)*100+(id3_info->id3_genren_info[2]-48)*10
                                                     +(id3_info->id3_genren_info[3]-48);
                                             else 
                                                  num=0;
 
                                             id3_info->id3_genren=num;

                                             //if(num==8)
						                     //{ id3_info->id3_genren_info[0]='J';
                                             //  id3_info->id3_genren_info[1]='a';
                                             //  id3_info->id3_genren_info[2]='z';
                                             //  id3_info->id3_genren_info[3]='z';
                                             // }
						                     //else if(num==13)
						                     //{ id3_info->id3_genren_info[0]='P';
                                             //  id3_info->id3_genren_info[1]='o';
                                             //  id3_info->id3_genren_info[2]='p';                              
                                             // }
						                     //else if(num==17)
						                     //{ 
						                     //  id3_info->id3_genren_info[0]='R';
                                             //  id3_info->id3_genren_info[1]='o';
                                             //  id3_info->id3_genren_info[2]='c';
                                             //  id3_info->id3_genren_info[3]='k'; 
                                             //}
                                             //else if(num==32)
						                     //{ 
						                     //  id3_info->id3_genren_info[0]='C';
                                             //  id3_info->id3_genren_info[1]='l';
                                             //  id3_info->id3_genren_info[2]='a';
                                             //  id3_info->id3_genren_info[3]='s';
                                             //  id3_info->id3_genren_info[4]='s';
                                             //  id3_info->id3_genren_info[5]='i';
                                             //  id3_info->id3_genren_info[6]='c';
                                             //  id3_info->id3_genren_info[7]='a';
                                             //  id3_info->id3_genren_info[8]='l';
                                             //}
                                             //else if(num==41)
						                     //{ 
						                     //  id3_info->id3_genren_info[0]='B';
                                             //  id3_info->id3_genren_info[1]='a';
                                             //  id3_info->id3_genren_info[2]='s';
                                             //  id3_info->id3_genren_info[3]='s';
                                             // }
                                             //else 
						                     //{
                                             //  id3_info->id3_genren_info[0]='N';
                                             //  id3_info->id3_genren_info[1]='o';
                                             //  id3_info->id3_genren_info[2]='r';
						                     // }
                                            }
					                 if(id3_find_status==4) ;
					                 else {h=0; k=0;}
								}
                              break;

						default:
							break;
					}//switch(k)

                

					if(id3_find_status==4)
                    {					
						i=min_size;                 
                     }
					
				}//for(; i<512*8; i++)
	
	}
	else {	//Find ID3V1
	    FileSeek(128, SEEK_END, hMainFile);
	    FileRead((unsigned char*)Buffer, 128,hMainFile);
		k=0;
		id3_find_mode = 0;		
	  id3_find_status = 0;
    
				for(i=0; i<ID3_V1_INBUFFER_SIZE; i++){
					switch(k)
					{
						case 0:
							if(Buffer[i]=='T') {k=1;}
							break;
						case 1:
							if(Buffer[i]=='A') {k=2;}
							else k=0;
							break;
						case 2:
							if(Buffer[i]=='G') {k=3; id3_find_mode=1; id3_info->id3_ver = 0x11;}
							else k=0;
							break;
						case 3:
							if(id3_find_status<30) id3_info->id3_title[id3_find_status] = Buffer[i];
							else if(id3_find_status<60) id3_info->id3_singer[id3_find_status-30] = Buffer[i];
							else if(id3_find_status<90) id3_info->id3_album[id3_find_status-60] = Buffer[i];
							id3_find_status++;
							if(id3_find_status==90) 
							   { 
							    id3_find_mode=3;k=4;
							    id3_info->id3_title_size=30;
							    id3_info->id3_singer_size=30;
							    id3_info->id3_album_size=30;
							    }
							break;
					  case 4: 
					     i+=4;//offset the year[4]
					     i+=30;//offset the comment[30];
							 k=5;
							 break;
						case 5:
						   id3_info->id3_genren=Buffer[i];
						   //if(id3_info->id3_genren==8)
						   //  { id3_info->id3_genren_info[0]='J';
                           //    id3_info->id3_genren_info[1]='a';
                           //    id3_info->id3_genren_info[2]='z';
                           //    id3_info->id3_genren_info[3]='z';
                           //   }
						   //else if(id3_info->id3_genren==13)
						   //  { id3_info->id3_genren_info[0]='P';
                           //    id3_info->id3_genren_info[1]='o';
                           //    id3_info->id3_genren_info[2]='p';                              
                           //   }
						   //else if(id3_info->id3_genren==17)
						   //   { 
						   //     id3_info->id3_genren_info[0]='R';
                           //     id3_info->id3_genren_info[1]='o';
                           //     id3_info->id3_genren_info[2]='c';
                           //     id3_info->id3_genren_info[3]='k'; 
                           //   }
                           //else if(id3_info->id3_genren==32)
						   //   { 
						   //     id3_info->id3_genren_info[0]='C';
                           //     id3_info->id3_genren_info[1]='l';
                           //     id3_info->id3_genren_info[2]='a';
                           //     id3_info->id3_genren_info[3]='s';
                           //     id3_info->id3_genren_info[4]='s';
                           //     id3_info->id3_genren_info[5]='i';
                           //     id3_info->id3_genren_info[6]='c';
                           //     id3_info->id3_genren_info[7]='a';
                           //     id3_info->id3_genren_info[8]='l';
                           //    }
                           //else if(id3_info->id3_genren==41)
						   //   { 
						   //     id3_info->id3_genren_info[0]='B';
                           //     id3_info->id3_genren_info[1]='a';
                           //     id3_info->id3_genren_info[2]='s';
                           //     id3_info->id3_genren_info[3]='s';
                           //    }
                           // else 
						   //    {
                           //     id3_info->id3_genren_info[0]='N';
                           //     id3_info->id3_genren_info[1]='o';
                           //     id3_info->id3_genren_info[2]='r';
						   //     }
                            k=6;
						   break;
							
						default:
							break;
					}
					
				}//for(i=0; i<512; i++) 
	}
	
	if(/*(id3_info->id3_title_size   != 0) ||*/
	    (id3_info->id3_singer_size != 0) || 
	    (id3_info->id3_album_size  !=0 )) {
	    id3_info->id3_check = 0x01;
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -