MTK 读取MP3生成资源文件

资料转载自网上 自己进行了小修改 能生成资源但没进行验证

 转载来自:http://blog.csdn.net/blogercn/archive/2009/08/10/4432331.aspx

 

 

#include #include #include #include #define FORMAT_IMY (18) #define FORMAT_MID (17) #define FORMAT_WAV (13) #define FORMAT_MMF (20) #define FORMAT_MP3 (5) #define FORMAT_PCM (7) #define FORMAT_DVI (11) #define FORMAT_AMR (3) char *getFileName(char *filename)//获取文件名称 { char *temp,*ret; int i = 0,nstrlen = 0; temp = filename; nstrlen = strlen(filename);//原始字符串长度 for(i = nstrlen -1;i >= 0;i--)//倒查 { if(filename[i] == '//')//遇到//终止 { break; } } if(i == 0) { ret = temp;//没有遇到//直接返回名称 } else { ret = (temp + i +1);//返回//之后的名称 } return (ret); } char * getfileextname(char * filename)//获取歌曲格式 { char strResult[128]={0}; //保存结果 char *temp, *ret; int i = 0,nStrLen = 0; temp = filename; nStrLen = strlen(filename); //原始字符串长度 for(i = nStrLen - 1; i >= 0; i--) //倒查,每个字符和反斜杠对比 { if (filename[i] == '.') //如果当前字符是反斜杠 { ret = (temp+i+1); break; } } return (ret); //返回歌曲格式 } int getfilue(char * extfilename)//获取歌曲类型 { if (memcmp(extfilename, "mp3", 3) == 0) { return (int)FORMAT_MP3; } else if (memcmp(extfilename, "mid", 3) == 0) { return (int)FORMAT_MID; } else if (memcmp(extfilename, "wav", 3) == 0) { return (int)FORMAT_WAV; } else { return 0; } } char * modifystr(char * str)//对歌曲名称进行修改 修改后为XXX_XXX_XXX { char *tmp; int i; tmp = str; for (i = 0; i < (int)strlen(str)-1; i++) { if ((str[i] == ' ') || (str[i] == '.')) { *(tmp+i) = '_'; } } return tmp; } BOOL isMusicFile(char * filename)//判断是否为所需要歌曲类型 { if (memcmp(filename, "null", 4)==0) { return FALSE; } if ((memcmp(getfileextname(filename), "mp3", 3) == 0) || (memcmp(getfileextname(filename), "mid", 3) == 0) || (memcmp(getfileextname(filename), "wav", 3) == 0)) { return TRUE; } else { return FALSE; } } int music2res(char * music, char * res)//将文件转化成数组 { long infileLen; //文件长度 int n = 0,num = 16,numcount = 0; //n 字节计数器, NUM换行指示 unsigned char c, c_in; //C_in文件字节,C转化 FILE *fh_in; FILE *fh_out; char com[256]={0}; char filename[256]={0}; assert((music != NULL) && (res != NULL)); fh_in = fopen(music,"rb"); if (NULL==fh_in) { printf("open read file error!!"); return 1; } fseek(fh_in,0,SEEK_END); infileLen=ftell(fh_in); fseek(fh_in,0,SEEK_SET); fh_out=fopen(res,"wb"); if (NULL==fh_out) { printf("open write file error!!"); return 1; } memcpy(filename, getFileName(music), 256); fputs(com, fh_out); putc(0x0d,fh_out); putc('/n',fh_out); memset(com, 0x00, 128); modifystr(filename); printf("__align(2) static const unsigned char %s[] = {/n", filename); fputs(com, fh_out); putc(0x0d,fh_out); putc('/n',fh_out); //重点说明这个循环(懂的就不用看了) //因为一个字节是八位 所以第一次取前四个高位 转化 第二次取后四个低位转化 //比如字节为11111111 那么右移四位得到高位为1111 得到值为15 然后将数字转成字符为F 然后再获取低位1111 得到值为15 转成字符为F //再在前面putc上0 x以及后面putc上, 最后转化的结果为0xFF,不断的循环读出直到生成结束 文件生成大小为mp3文件的5倍左右 while (n<(infileLen)) { putc('0',fh_out);//加上0 putc('x',fh_out);//加上x c_in=getc(fh_in); c=c_in; c=(c>>4)&0x0f; //右移四位获取高四个BIT的内容 if (c<0x0a) { c+=0x30; //把符号转成数字 } else { c+=0x37; //把数字转成a到f } putc(c,fh_out); c=c_in&0x0f; //获取低四个BIT内容 if (c<0x0a) { c+=0x30; } else { c+=0x37; } putc(c,fh_out); putc(',',fh_out);//加上, n++; if (n % num ==0)//换行 { putc(0x0d,fh_out); putc('/n',fh_out); } } putc('}',fh_out); putc(0x0d,fh_out); putc('/n',fh_out); memset(com, 0x00, 128); printf("{%s, sizeof(%s), %d}/n", filename, filename, getfilue(getfileextname(music))); fputs(com, fh_out); putc(0x0d,fh_out); putc('/n',fh_out); numcount = n / num; printf("/n原始字节数为:%d ,生成行数为:%d。/n",infileLen,numcount); fclose(fh_in); fclose(fh_out); return 0; } int main() { char *filename = "D://TDDOWNLOAD//kldygxq.mp3"; char *retfilename = "resource_audio.c"; int ret; if(isMusicFile(filename)) { ret = music2res(filename,retfilename); if(ret == 0) { printf("生成成功!/n"); } else { printf("生成失败!/n"); } } else { printf("请选择正确音乐文件!"); } }

 

 

改下路径名称就可以使用

你可能感兴趣的:(MTK)