mp3作者名字读取,由于utf16的编码,串口打印出来是乱码
authorhcj <1224667075@qq.com>
Thu, 4 Jul 2024 01:44:33 +0000 (09:44 +0800)
committerSnickerSun <snickersun@163.com>
Fri, 5 Jul 2024 02:34:21 +0000 (10:34 +0800)
code/sdk/application/wearable/service/ble_service/blemoder/bletest.cpp

index 637da88..23c90b8 100644 (file)
@@ -118,33 +118,89 @@ void ble_set_ai_Answer_str(char *buf)
 // }
 // ]
 // }
-// Tag_Trailer_t Mp3Trailer;
+Tag_Trailer_t Mp3Trailer;
+Tag_ID3V2_TAG_T TAG_T;
 
-// void Tag_GetTrailer( FILE *fp)
-// {
-// // Get Header
-//     fseek(fp,-128,SEEK_END);
-//     fread(Mp3Trailer.Header,3,1,fp);
-//     // Get Title
-//     fseek(fp,-125,SEEK_END);
-//     fread(Mp3Trailer.Title,30,1,fp);
-//     // Get Artist
-//     fseek(fp,-95,SEEK_END);
-//     fread(Mp3Trailer.Artist,30,1,fp);
-//     // Get Album
-//     fseek(fp,-65,SEEK_END);
-//     fread(Mp3Trailer.Album,30,1,fp);
-//     // Get Year
-//     fseek(fp,-35,SEEK_END);
-//     fread(Mp3Trailer.Year,4,1,fp);
-//     // Get Comment
-//     fseek(fp,-31,SEEK_END);
-//     fread(Mp3Trailer.Comment,30,1,fp);
-//     // Get Cenre
-//     fseek(fp,-1,SEEK_END);
-//     fread(Mp3Trailer.Cenre,1,1,fp);
-// }
+void Tag_GetTrailer( FILE *fp)
+{
+// Get Header
+  
+
+    fseek(fp,-128,SEEK_END);
+    fread(Mp3Trailer.Header,3,1,fp);
+    printf("Header : %s",Mp3Trailer.Header);
+    // Get Title
+    fseek(fp,-125,SEEK_END);
+    fread(Mp3Trailer.Title,30,1,fp);
+    // Get Artist
+    fseek(fp,-95,SEEK_END);
+    fread(Mp3Trailer.Artist,30,1,fp);
+     printf("Artist : %s",Mp3Trailer.Artist);
+    // Get Album
+    fseek(fp,-65,SEEK_END);
+    fread(Mp3Trailer.Album,30,1,fp);
+    // Get Year
+    fseek(fp,-35,SEEK_END);
+    fread(Mp3Trailer.Year,4,1,fp);
+    // Get Comment
+    fseek(fp,-31,SEEK_END);
+    fread(Mp3Trailer.Comment,30,1,fp);
+    // Get Cenre
+    fseek(fp,-1,SEEK_END);
+    fread(Mp3Trailer.Cenre,1,1,fp);
+}
+
+
+void Tag_read_ID2V3( FILE *fp)
+{
+// Get Header
+    fseek(fp,10,SEEK_CUR);
+    printf("Tag_read_ID2V3\r\n");
+
+    for(int i=7;i>0;i--)
+    {
+        memset_s(&TAG_T,sizeof(TAG_T),0,sizeof(TAG_T));
+        int size =fread(TAG_T.ID,4,1,fp);
+
+        if(strcmp("TPE1",TAG_T.ID)==0)
+        printf("Header :%d %s\r\n",size,TAG_T.ID);
+      
+       
+        fread(TAG_T.Size,4,1,fp);
+        size = TAG_T.Size[0]*0x100000000 + TAG_T.Size[1]*0x10000+ TAG_T.Size[2]*0x100 +TAG_T.Size[3];
 
+        if(strcmp("TPE1",TAG_T.ID)==0)
+        printf("Size :%d\r\n",size);
+        
+        if(size<0)
+        return;
+
+
+        fread(TAG_T.Flags,2,1,fp);
+        
+        char buf[124]={0};
+        if(strcmp("TPE1",TAG_T.ID)==0)
+        {
+            memset_s(&Mp3Trailer,sizeof(Mp3Trailer),0,sizeof(Mp3Trailer));
+            fread(Mp3Trailer.Artist,1,size,fp);
+            printf("data : %s\r\n",Mp3Trailer.Artist);
+        }
+        else
+        {
+            if(size>=128)
+            {
+                fseek(fp,size,SEEK_CUR);
+            }
+            else
+            {
+                fread(buf,1,size,fp);
+                //printf("data : %s\r\n",buf);
+            }
+        }
+    }
+     return;
+    
+}
 
 
 char * dir_to_json_buf_malloc_(uint8_t type)
@@ -197,15 +253,28 @@ char * dir_to_json_buf_malloc_(uint8_t type)
                         file_size = ftell(fp);       // 获取当前文件指针位置,即文件大小
                         fseek(fp, 0, SEEK_SET); // 将文件指针移回文件开头
                     }
-                    //Tag_GetTrailer(fp);
-
+                    Tag_ID3V2_t tag={0};
+                    fread(tag.Header,3,1,fp);
+                    //printf("tag.Header %s\r\n",tag.Header);
+                    fread(&tag.Ver,1,1,fp);
+                    //printf("tag.Ver %d\r\n",tag.Ver);
+                    if(tag.Ver==3)
+                    {
+                        printf("%s\r\n",ent->d_name);
+                        fseek(fp, 0, SEEK_SET); // 将文件指针移回文件开头
+                        Tag_read_ID2V3(fp);
+                    }
+                    else
+                    {
+                        printf("tag.Header %s %d\r\n",tag.Header,tag.Ver);
+                    }
                     fclose(fp);
 
                     cJSON* itemJSON = cJSON_CreateObject();
                     cJSON_AddNumberToObject(itemJSON,"uid",file_index);
                     cJSON_AddStringToObject(itemJSON,"name",fileName.c_str());
                     cJSON_AddNumberToObject(itemJSON,"size",file_size);
-                    cJSON_AddStringToObject(itemJSON,"artist", "未知");
+                    cJSON_AddStringToObject(itemJSON,"artist",Mp3Trailer.Artist);
                     cJSON_AddStringToObject(itemJSON,"dur", "未知");
                     cJSON_AddItemReferenceToArray(data_arryJSON,itemJSON);
                     file_index++;