user-0 提问: *急*判断文件是不是音乐文件

回复:
user: user-1
content: 引用 20 楼 zhao4zhong1 的回复:判断文件前几个字节值的办法对mp3文件似乎不灵。 我刚才用WinHex软件打开几个mp3文件看了看，前几个字节值好象没什么规律。 文件内容中有"LAME3."多半是mp3文件。

user: user-2
content: 引用 10 楼 u012464303 的回复:[quote=引用 4 楼 user-7 的回复:] 如果只是文件名，就看它是不是.mp3结尾； 否则就得看文件头的一些字节信息了。哪段字节呀[/quote] 这个要看音频文件了。

user: user-3
content: 根据文件头特征码判断是比较简单实际的做法。 可以参考一下python中的imghdr或sndhdr的做法。 也可以借助第三方库，megui还是那个软件（我记不清了）里边就有一个dll是用于判断多媒体文件类型的。

user: user-0
content: 引用 11 楼 zhao4zhong1 的回复:以下内容来自Audition软件打开声音文件对话框： 64-bit doubles (RAW) (*.dbl) 8-bit signed (*.sam) A/mu-Law Wave (*.wav) ACM Waveform (*.wav) Amiga IFF-8SVX (*.iff;*.svx) Apple AIFF (*.aif;*.snd) ASCII Text Data (*.txt) CD Digital Audio (*.cda) Cool Edit Loop (*.cel) Creative Sound Blaster (*.voc) Dialogic ADPCM (*.vox) DiamondWare Digitized (*.dwd) DVI/IMA ADPCM (*.wav) Microsoft ADPCM (*.wav) mp3PRO?(FhG) (*.mp3) Next/Sun (*.au;*.snd) SampleVision (*.smp) Windows Media Audio 8 (*.wma;*.asf;*.asx) Windows PCM (*.wav) PCM Raw Data (*.pcm;*.raw).mp3就判断是不是mp3PRO?(FhG) (*.mp3) 么

user: user-0
content: 引用 5 楼 allenltiverson 的回复:如果你已知所有音乐文件的格式，那么通过后缀是最好的方法。但是有一个问题，后缀是音乐格式并不代码文件就是音乐文件，并不排除人为修改的可能。所有最好的办法还是判断文件内容，一般文件头都会包含一些信息对 主要就是这个问题，自己改的后缀如何判断

user: user-1
content: 以下内容来自Audition软件打开声音文件对话框： 64-bit doubles (RAW) (*.dbl) 8-bit signed (*.sam) A/mu-Law Wave (*.wav) ACM Waveform (*.wav) Amiga IFF-8SVX (*.iff;*.svx) Apple AIFF (*.aif;*.snd) ASCII Text Data (*.txt) CD Digital Audio (*.cda) Cool Edit Loop (*.cel) Creative Sound Blaster (*.voc) Dialogic ADPCM (*.vox) DiamondWare Digitized (*.dwd) DVI/IMA ADPCM (*.wav) Microsoft ADPCM (*.wav) mp3PRO?(FhG) (*.mp3) Next/Sun (*.au;*.snd) SampleVision (*.smp) Windows Media Audio 8 (*.wma;*.asf;*.asx) Windows PCM (*.wav) PCM Raw Data (*.pcm;*.raw)

user: user-0
content: 引用 4 楼 user-7 的回复:如果只是文件名，就看它是不是.mp3结尾； 否则就得看文件头的一些字节信息了。哪段字节呀

user: user-0
content: 引用 2 楼 cfjtaishan 的回复:根据后缀名来判断吧~~~其他需要音频解码了吧 C程序如何判断

user: user-0
content: 引用 1 楼 N_sev7 的回复:[quote=引用 楼主 u012464303 的回复:] 如何判断文件是不是音乐文件  如：.mp3格式的 1.取得文件名，判断后缀是否以.mp3结束 2.解析源文件...[/quote] 解析文件信息，如何判断

user: user-4
content: get the extension name and judge if it's 'mp3'

user: user-5
content: 查看文件属性吧，file

user: user-6
content: 引用 12 楼 u012464303 的回复:引用 5 楼 allenltiverson 的回复:如果你已知所有音乐文件的格式，那么通过后缀是最好的方法。但是有一个问题，后缀是音乐格式并不代码文件就是音乐文件，并不排除人为修改的可能。所有最好的办法还是判断文件内容，一般文件头都会包含一些信息对 主要就是这个问题，自己改的后缀如何判断http://blog.csdn.net/sunshine1314/article/details/2514322

user: user-1
content: 判断文件前几个字节值的办法对mp3文件似乎不灵。 我刚才用WinHex软件打开几个mp3文件看了看，前几个字节值好象没什么规律。

user: user-0
content: 引用 18 楼 zhao4zhong1 的回复:仅供参考#include <stdio.h> struct EH {     char e[32];     char h[32]; } eh[29]={     {"Windows Bitmap (bmp)"       ,                         "424D"},     {"JPEG (jpg)"                 ,                       "FFD8FF"},     {"MPEG (mpg)"                 ,                     "000001B3"},     {"MPEG (mpg)"                 ,                     "000001BA"},     {"Outlook (pst)"              ,                     "2142444E"},     {"Real Media (rm)"            ,                     "2E524D46"},     {"Real Audio (ram)"           ,                     "2E7261FD"},     {"Adobe Photoshop (psd)"      ,                     "38425053"},     {"CAD (dwg)"                  ,                     "41433130"},     {"AVI (avi)"                  ,                     "41564920"},     {"GIF (gif)"                  ,                     "47494638"},     {"TIFF (tif)"                 ,                     "49492A00"},     {"MIDI (mid)"                 ,                     "4D546864"},     {"ZIP Archive (zip)"          ,                     "504B0304"},     {"RAR Archive (rar)"          ,                     "52617221"},     {"Wave (wav)"                 ,                     "57415645"},     {"Quicktime (mov)"            ,                     "6D6F6F76"},     {"PNG (png)"                  ,                     "89504E47"},     {"Quicken (qdf)"              ,                     "AC9EBD8F"},     {"MS Word/Excel (xls.or.doc)" ,                     "D0CF11E0"},     {"Windows Password (pwl)"     ,                     "E3828596"},     {"WordPerfect (wpd)"          ,                     "FF575043"},     {"XML (xml)"                  ,                   "3C3F786D6C"},     {"HTML (html)"                ,                   "68746D6C3E"},     {"Rich Text Format (rtf)"     ,                   "7B5C727466"},     {"Adobe Acrobat (pdf)"        ,               "255044462D312E"},     {"Windows Media (asf)"        ,             "3026B2758E66CF11"},     {"Outlook Express (dbx)"      ,             "CFAD12FEC5FD746F"},     {"MS Access (mdb)"            ,         "5374616E64617264204A"}, }; FILE *f; static char s[32]; int i,j,c; int main(int argc,char **argv) {     if (argc<2 || argc>2) {         fprintf(stderr,"GuessFileExt according to head bytes.\nUsage: %s filename\n",argv[0]);         return 1;     }     f=fopen(argv[1],"rb");     if (NULL==f) {         fprintf(stderr,"Can not open file %s\n",argv[1]);         return 2;     }     for (i=0;i<14;i++) {         c=fgetc(f);         if (c==EOF) break;//         sprintf(s+i*2,"%2X",(unsigned char)c);         for (j=0;j<29;j++) {             if (0==strcmp(s,eh[j].h)) {                 printf("%s\n",eh[j].e);                 fclose(f);                 return 0;             }         }     }     printf("Unknown\n");     fclose(f);     return 3; } 非常感谢！

user: user-1
content: 仅供参考#include <stdio.h> struct EH {     char e[32];     char h[32]; } eh[29]={     {"Windows Bitmap (bmp)"       ,                         "424D"},     {"JPEG (jpg)"                 ,                       "FFD8FF"},     {"MPEG (mpg)"                 ,                     "000001B3"},     {"MPEG (mpg)"                 ,                     "000001BA"},     {"Outlook (pst)"              ,                     "2142444E"},     {"Real Media (rm)"            ,                     "2E524D46"},     {"Real Audio (ram)"           ,                     "2E7261FD"},     {"Adobe Photoshop (psd)"      ,                     "38425053"},     {"CAD (dwg)"                  ,                     "41433130"},     {"AVI (avi)"                  ,                     "41564920"},     {"GIF (gif)"                  ,                     "47494638"},     {"TIFF (tif)"                 ,                     "49492A00"},     {"MIDI (mid)"                 ,                     "4D546864"},     {"ZIP Archive (zip)"          ,                     "504B0304"},     {"RAR Archive (rar)"          ,                     "52617221"},     {"Wave (wav)"                 ,                     "57415645"},     {"Quicktime (mov)"            ,                     "6D6F6F76"},     {"PNG (png)"                  ,                     "89504E47"},     {"Quicken (qdf)"              ,                     "AC9EBD8F"},     {"MS Word/Excel (xls.or.doc)" ,                     "D0CF11E0"},     {"Windows Password (pwl)"     ,                     "E3828596"},     {"WordPerfect (wpd)"          ,                     "FF575043"},     {"XML (xml)"                  ,                   "3C3F786D6C"},     {"HTML (html)"                ,                   "68746D6C3E"},     {"Rich Text Format (rtf)"     ,                   "7B5C727466"},     {"Adobe Acrobat (pdf)"        ,               "255044462D312E"},     {"Windows Media (asf)"        ,             "3026B2758E66CF11"},     {"Outlook Express (dbx)"      ,             "CFAD12FEC5FD746F"},     {"MS Access (mdb)"            ,         "5374616E64617264204A"}, }; FILE *f; static char s[32]; int i,j,c; int main(int argc,char **argv) {     if (argc<2 || argc>2) {         fprintf(stderr,"GuessFileExt according to head bytes.\nUsage: %s filename\n",argv[0]);         return 1;     }     f=fopen(argv[1],"rb");     if (NULL==f) {         fprintf(stderr,"Can not open file %s\n",argv[1]);         return 2;     }     for (i=0;i<14;i++) {         c=fgetc(f);         if (c==EOF) break;//         sprintf(s+i*2,"%2X",(unsigned char)c);         for (j=0;j<29;j++) {             if (0==strcmp(s,eh[j].h)) {                 printf("%s\n",eh[j].e);                 fclose(f);                 return 0;             }         }     }     printf("Unknown\n");     fclose(f);     return 3; }

user: user-0
content: 引用 14 楼 mayadong7349 的回复:根据文件头特征码判断是比较简单实际的做法。 可以参考一下python中的imghdr或sndhdr的做法。 也可以借助第三方库，megui还是那个软件（我记不清了）里边就有一个dll是用于判断多媒体文件类型的。能能在具体点么

user: user-0
content: 引用 15 楼 zhao4zhong1 的回复:[quote=引用 13 楼 u012464303 的回复:] [quote=引用 11 楼 zhao4zhong1 的回复:] 以下内容来自Audition软件打开声音文件对话框： 64-bit doubles (RAW) (*.dbl) 8-bit signed (*.sam) A/mu-Law Wave (*.wav) ACM Waveform (*.wav) Amiga IFF-8SVX (*.iff;*.svx) Apple AIFF (*.aif;*.snd) ASCII Text Data (*.txt) CD Digital Audio (*.cda) Cool Edit Loop (*.cel) Creative Sound Blaster (*.voc) Dialogic ADPCM (*.vox) DiamondWare Digitized (*.dwd) DVI/IMA ADPCM (*.wav) Microsoft ADPCM (*.wav) mp3PRO?(FhG) (*.mp3) Next/Sun (*.au;*.snd) SampleVision (*.smp) Windows Media Audio 8 (*.wma;*.asf;*.asx) Windows PCM (*.wav) PCM Raw Data (*.pcm;*.raw).mp3就判断是不是mp3PRO?(FhG) (*.mp3) 么[/quote] 音乐文件后缀参考后面括号里面列出的*.ext，当然，实际比这还要多。不过我想这些已经够用了。[/quote]我主要就是想判断那种自己创建的文件把后缀名改成.mp3如何判断不是音乐文件

user: user-1
content: 引用 13 楼 u012464303 的回复:[quote=引用 11 楼 zhao4zhong1 的回复:] 以下内容来自Audition软件打开声音文件对话框： 64-bit doubles (RAW) (*.dbl) 8-bit signed (*.sam) A/mu-Law Wave (*.wav) ACM Waveform (*.wav) Amiga IFF-8SVX (*.iff;*.svx) Apple AIFF (*.aif;*.snd) ASCII Text Data (*.txt) CD Digital Audio (*.cda) Cool Edit Loop (*.cel) Creative Sound Blaster (*.voc) Dialogic ADPCM (*.vox) DiamondWare Digitized (*.dwd) DVI/IMA ADPCM (*.wav) Microsoft ADPCM (*.wav) mp3PRO?(FhG) (*.mp3) Next/Sun (*.au;*.snd) SampleVision (*.smp) Windows Media Audio 8 (*.wma;*.asf;*.asx) Windows PCM (*.wav) PCM Raw Data (*.pcm;*.raw).mp3就判断是不是mp3PRO?(FhG) (*.mp3) 么[/quote] 音乐文件后缀参考后面括号里面列出的*.ext，当然，实际比这还要多。不过我想这些已经够用了。

user: user-6
content: 如果你已知所有音乐文件的格式，那么通过后缀是最好的方法。但是有一个问题，后缀是音乐格式并不代码文件就是音乐文件，并不排除人为修改的可能。所有最好的办法还是判断文件内容，一般文件头都会包含一些信息

user: user-7
content: 如果只是文件名，就看它是不是.mp3结尾； 否则就得看文件头的一些字节信息了。