c语言程序设计MP3或MP4文件基本信息的解析 c++程序设计的基本信息

\u600e\u6837\u7528C\u8bed\u8a00\u7f16\u7a0b\u6253\u5f00\u4e00\u4e2a\u6587\u4ef6(\u6bd4\u5982mp3\uff0cmp4)

\u3000\u3000\u53ef\u4ee5\u4f7f\u7528PlaySound()\u51fd\u6570\u64ad\u653emp3\u97f3\u9891\uff0c\u8be5\u51fd\u6570\u539f\u578b\u4f4d\u4e8ewindows.h\u3002

\u3000\u3000PlaySound\u51fd\u6570\u7684\u58f0\u660e\u4e3a\uff1a
\u3000\u3000BOOL PlaySound(LPCSTR pszSound, HMODULE hwnd,DWORD fdwSound);
\u3000\u3000\u53c2\u6570pszSound\u662f\u6307\u5b9a\u4e86\u8981\u64ad\u653e\u58f0\u97f3\u7684\u5b57\u7b26\u4e32\u3002
\u3000\u3000\u53c2\u6570hwnd\u662f\u5e94\u7528\u7a0b\u5e8f\u7684\u5b9e\u4f8b\u53e5\u67c4\uff0c\u9664\u975epszSound\u7684\u6307\u5411\u4e00\u4e2a\u8d44\u6e90\u6807\u8bc6\u7b26\uff08\u5373fdwSound\u88ab\u5b9a\u4e49\u4e3aSND_RESOURCE\uff09\uff0c\u5426\u5219\u5fc5\u987b\u8bbe\u7f6e\u4e3aNULL\u3002
\u3000\u3000\u53c2\u6570fdwSound\u662f\u6807\u5fd7\u7684\u7ec4\u5408\uff0c\u5982\u4e0b\u8868\u6240\u793a\u3002\u82e5\u6210\u529f\u5219\u51fd\u6570\u8fd4\u56deTRUE\uff0c\u5426\u5219\u8fd4\u56deFALSE\u3002
\u3000\u3000\u4f7f\u7528PlaySound\u51fd\u6570\u65f6\u9700\u8981\u5728#include\u540e\u9762\u52a0\u4e0a\uff08\u6ce8\u610f\uff1a\u4e0d\u80fd\u52a0\u5728\u524d\u9762\uff09\uff1a
\u3000\u3000\u4f8b\u7a0b\uff1a

\u3000\u3000CFileDialog dlg(TRUE, "mp3", "*.mp3", OFN_HIDEREADONLY|OFN_ALLOWMULTISELECT, "mp3\u6587\u4ef6(*.mp3)|*.mp3|");
\u3000\u3000/*\u521b\u5efa\u9009\u62e9\u5bf9\u8bdd\u6846\uff0c\u8ba9\u7528\u6237\u4ece\u6587\u4ef6\u5939\u4e2d\u9009\u53d6\u4e00\u4e2aMP3\u6587\u4ef6*/
\u3000\u3000int iRet = dlg.DoModal();//\u83b7\u5f97\u5bf9\u8bdd\u6846\u8fd4\u56de\u503c
\u3000\u3000if(IDOK == iRet) //\u5982\u679c\u8fd4\u56de\u503c\u6210\u529f\uff0c\u8868\u660e\u6210\u529f\u83b7\u53d6\u4e00\u4e2aMP3\u6587\u4ef6
\u3000\u3000{
\u3000\u3000CString pathName= dlg.GetPathName(); //\u5f97\u5230\u6587\u4ef6\u7684\u8def\u5f84\u540d\u79f0
\u3000\u3000PlaySound( pathName , NULL, SND_FILENAME | SND_ASYNC);//\u7528playsound\u51fd\u6570\u64ad\u653e\u8be5\u6587\u4ef6
\u3000\u3000}

\u4e66\u3000\u540d\u3000C++\u7a0b\u5e8f\u8bbe\u8ba1\u4e1b \u4e66 \u540d\u300021\u4e16\u7eaa\u9ad8\u7b49\u6559\u80b2\u8ba1\u7b97\u673a\u89c4\u5212\u6559\u6750\u6807\u51c6\u4e66\u53f7\u3000ISBN 978-7-115-30779-8 \u5370\u3000\u5f20\u300019.75\u5b57\u3000\u6570\u3000517 \u5343\u5b57\u88c5\u3000\u5e27\u3000\u5e73\u88c5\u7248\u3000\u6b21\u3000\u7b2c1\u7248\u7b2c1\u6b21\u672c \u5370 \u6b21\u30002013\u5e742\u6708\u9996 \u5370 \u6570\u3000-- \u518c\u5b9a\u3000\u4ef7\u300038.00 \u5143

找了个MP3看了下,comment是29个字节。
可参考 http://www.chineselinuxuniversity.net/articles/27374.shtml

拿VC的C语言写了下:
头文件:
#include <stdio.h>

// TODO: reference additional headers your program requires here

#define MP3_ID3_LENGTH 10
typedef struct tag_ID3_INFO
{

} ID3_INFO;

#define IDENTIFY_LEN 3
#define TITLE_LEN 30
#define ARTIST_LEN 30
#define ALBUM_LEN 30
#define YEAR_LEN 4
#define COMMENT_LEN 30
#define GENRE_LEN 1

// IDENTIFY_LEN + TITLE_LEN +...
#define MP3_INFO_LENGTH 128

typedef struct tag_MP3_INFO
{
char Identify[IDENTIFY_LEN + 1]; //TAG三个字母
//这里可以用来鉴别是不是文件信息内容
char Title[TITLE_LEN + 1]; //歌曲名,30个字节
char Artist[ARTIST_LEN + 1]; //歌手名,30个字节
char Album[ARTIST_LEN + 1]; //所属唱片,30个字节
char Year[YEAR_LEN + 1]; //年,4个字节
char Comment[COMMENT_LEN + 1]; //注释,28个字节
char Genre[GENRE_LEN + 1]; //类型 ,1个字节
} MP3_INFO;

C文件:
#include <string.h>

#define MP3_OK 1
#define MP3_ERROR 1

FILE *OpenMp3File(char *pFileName);
int ReadMP3Info(FILE *pFile, MP3_INFO *pstInfo);
int OutputMP3Info(MP3_INFO *pstMp3Info);

int main(int argc, char* argv[])
{
FILE *pFile = NULL;
MP3_INFO stMp3Info = {0};
char *pfname = "E:\\Project\\MP3\\test.MP3";

pFile = OpenMp3File(pfname);
if (NULL == pFile)
{
return MP3_ERROR;
}

ReadMP3Info(pFile, &stMp3Info);

printf("\r\nMP3 file: %s", pfname);
OutputMP3Info(&stMp3Info);

printf("Hello World!\n");
return MP3_OK;
}

FILE *OpenMp3File(char *pFileName)
{
FILE *pFile = NULL;
pFile = fopen(pFileName,"rb");
if (NULL==pFile)
{
printf("open read file error!!");
return NULL;
}

return pFile;
}

int ReadMP3Info(FILE *pFile, MP3_INFO *pstInfo)
{
int len = 0;
if ((NULL == pFile) || (NULL == pstInfo))
{
return MP3_ERROR;
}

fseek(pFile, 0, SEEK_END);
len = ftell(pFile);
if (len <= (MP3_INFO_LENGTH + MP3_ID3_LENGTH))
{
return MP3_ERROR;
}

memset(pstInfo, 0, sizeof(MP3_INFO));

fseek(pFile, -MP3_INFO_LENGTH, SEEK_END);
len = fread((char *)(pstInfo->Identify), 1, IDENTIFY_LEN, pFile);
len += fread((char *)(pstInfo->Title), 1, TITLE_LEN, pFile);
len += fread((char *)(pstInfo->Artist), 1, ARTIST_LEN, pFile);
len += fread((char *)(pstInfo->Album), 1, ALBUM_LEN, pFile);
len += fread((char *)(pstInfo->Year), 1, YEAR_LEN, pFile);
len += fread((char *)(pstInfo->Comment), 1, COMMENT_LEN, pFile);
len += fread((char *)(pstInfo->Genre), 1, GENRE_LEN, pFile);
if (MP3_INFO_LENGTH != len)
{
return MP3_ERROR;
}

return MP3_OK;
}

int OutputMP3Info(MP3_INFO *pstMp3Info)
{
printf("\r\nTag : %s", pstMp3Info->Identify);
printf("\r\nTitle : %s", pstMp3Info->Title);
printf("\r\nArtist : %s", pstMp3Info->Artist);
printf("\r\nAlbum : %s", pstMp3Info->Album);
printf("\r\nYear : %s", pstMp3Info->Year);
printf("\r\nComment: %s", pstMp3Info->Comment);

return MP3_OK;
}

测试:
MP3 file: E:\Project\MP3\test.MP3
Tag : TAG
Title : TrackTitle
Artist : ArtistName
Album : AlbumTitle
Year : 2012
Comment: This is a comment

C文件:
#include <string.h>

#define MP3_OK 1
#define MP3_ERROR 1

FILE *OpenMp3File(char *pFileName);
int ReadMP3Info(FILE *pFile, MP3_INFO *pstInfo);
int OutputMP3Info(MP3_INFO *pstMp3Info);

int main(int argc, char* argv[])
{
FILE *pFile = NULL;
MP3_INFO stMp3Info = {0};
char *pfname = "E:\\Project\\MP3\\test.MP3";

pFile = OpenMp3File(pfname);
if (NULL == pFile)
{
return MP3_ERROR;
}

ReadMP3Info(pFile, &stMp3Info);

printf("\r\nMP3 file: %s", pfname);
OutputMP3Info(&stMp3Info);

printf("Hello World!\n");
return MP3_OK;
}

FILE *OpenMp3File(char *pFileName)
{
FILE *pFile = NULL;
pFile = fopen(pFileName,"rb");
if (NULL==pFile)
{
printf("open read file error!!");
return NULL;
}

return pFile;
}

int ReadMP3Info(FILE *pFile, MP3_INFO *pstInfo)
{
int len = 0;
if ((NULL == pFile) || (NULL == pstInfo))
{
return MP3_ERROR;
}

先把某个mp3文件用 winhex 程序解析出来
然后开始自己慢慢研究,你会有收获的。

  • 鎬庢牱鐢C璇█缂栫▼鎵撳紑涓涓枃浠(姣斿mp3,mp4)
    绛旓細鍙互浣跨敤PlaySound()鍑芥暟鎾斁mp3闊抽锛岃鍑芥暟鍘熷瀷浣嶄簬windows.h銆侾laySound鍑芥暟鐨勫0鏄庝负锛欱OOL PlaySound(LPCSTR pszSound, HMODULE hwnd,DWORD fdwSound);鍙傛暟pszSound鏄寚瀹氫簡瑕佹挱鏀惧0闊崇殑瀛楃涓层傚弬鏁癶wnd鏄簲鐢绋嬪簭鐨勫疄渚嬪彞鏌勶紝闄ら潪pszSound鐨勬寚鍚戜竴涓祫婧愭爣璇嗙锛堝嵆fdwSound琚畾涔変负SND_RESOURCE锛夛紝鍚﹀垯...
  • ,璁$畻鏈绋嬪簭c璇█瀛︿範鐧惧害浜戣祫婧
    绛旓細閾炬帴:https://pan.baidu.com/s/10CNYFKsv7sD5qT5E_CAy8w 鎻愬彇鐮:gcqu BeePC瑙嗛鏁欑▼|銆婅閰嶅紡寤虹瓚娣峰嚌鍦熸瀯浠舵繁鍖璁捐銆嬫暀鏉愰厤濂桞eePC瑙嗛鏁欑▼|BeePC瑙嗛褰曞埗|47銆佸鑷敱甯冪疆-澧欏嚭鍥.mp4|46銆佸鐢诲竷鍑哄浘锛堜笅锛.mp4|45銆佸鐢诲竷鍑哄浘锛堜笂锛.mp4|44銆佸闀滃儚銆佸鑷敱缂栧彿.mp4|43銆佸鑷敱甯冪疆-闄勫睘...
  • C璇█缂栧啓涓涓畝鍗曠殑瑙嗛鎾斁鍣ㄥ彲浠ユ挱鏀mp4鐨勫氨濂
    绛旓細棣栧厛浣犺浼氬湪灞忓箷涓婃樉绀哄浘褰紝杩欎釜鏄樉绀鸿棰戞椂闇瑕佺殑锛屾樉绀烘槸鏈缁堢粨鏋滐紝杩囩▼鏄В鐮MP4鏍煎紡鐨勬枃浠讹紝浠庝腑鑾峰彇姣忎竴甯х殑鍥惧儚鏁版嵁锛屽苟灏嗚繖浜涙暟鎹樉绀哄湪灞忓箷涓娿傚叾娆★紝浣犺浼氳闊抽璁惧鎾斁闊抽锛岃棰戜腑鏈夊0闊崇殑锛岄渶瑕佹挱鏀俱傞煶棰戜篃瑕佷粠mp4鏍煎紡鏂囦欢涓В鐮佸嚭鏉ワ紝鐢C璇█鎺у埗闊抽璁惧锛屽皢瑙g爜鍑烘潵鐨勯煶棰戞暟鎹緭鍑鸿嚦闊...
  • 宓屽叆寮c璇█
    绛旓細C璇█鏄缂栫▼璇█锛屽祵鍏ュ紡鏄竴涓涓氾紝鍗曠墖鏈烘槸涓涓钩鍙颁篃鏄竴涓伐鍏凤紝鑱旂郴璧锋潵灏辨槸锛岀敤C璇█缂栬緫鍑轰唬鐮侊紝鐒跺悗绉绘鍒板崟鐗囨満涓婅繍琛岋紝涓よ呯粨鍚堝仛鍑轰竴涓▼搴忥紝鏈鍚庣Щ妞嶅埌鏌愪竴涓祵鍏ュ紡浜у搧涓婃瘮濡傛墜鏈猴紝MP4锛MP3绛夌瓑锛岀‘淇濆彲浠ャ傚祵鍏ュ紡缂栫▼鐢ㄧ殑鏈澶氱殑涔熸槸C璇█锛屽拰鏅氱殑windows涓嬬殑C缂栫▼涓嶅悓鐨勫氨鏄紝姣斿搴旂敤...
  • 姹C璇█澶х甯笅蹇欏晩鍟婂晩鍟!
    绛旓細鍥炵瓟锛氫笁1鏈哄櫒 2灞炴 璁惧绠$悊鍣 3鍏堣繘鍚庡嚭 4鍏堣繘鍏堝嚭 5鏁板6mp3 7mp4
  • C璇█楂樼骇绋嬪簭璁捐鐩綍
    绛旓細1.2鑺傛兜鐩栦簡C璇█鐨勮鍙ョ粨鏋勶紝浣夸綘浜嗚В濡備綍缁勭粐浠g爜閫昏緫銆1.3鑷1.5绔犲垎鍒杩颁簡鏁扮粍銆佹寚閽堝拰缁撴瀯浣撲笌鑱斿悎浣撶殑浣跨敤锛屾彁鍗囨暟鎹粍缁囪兘鍔涖1.6鑺傛繁鍏ヨВ鏋愬嚱鏁帮紝璁╀綘鐞嗚В绋嬪簭鐨勬ā鍧楀寲璁捐銆1.7鑷1.8鑺傛帰璁ㄤ簡瀛樺偍绫诲瀷銆侀缂栬瘧瀹忥紝浠ュ強濡備綍楂樻晥鍦版搷浣滃唴瀛樺拰鏂囦欢銆1.9鑺備粙缁嶄簡鏈夌紦鍐叉柟寮忕殑鏂囦欢鎿嶄綔鍜屾帶鍒...
  • 璺眰c璇█绋嬪簭鏁欑▼,鍏堜笂100,鎼炲畾杩藉姞銆
    绛旓細閾炬帴: https://pan.baidu.com/s/1115MNWjku3s1Wi2JHGecsw 鎻愬彇鐮: vwi9 鍗冮攱Mars鑰佸笀Java璇█鏁欑▼-2013骞寸増锛屽彶涓婃渶鐗沯ava鍩硅瑙嗛 鍗冮攱-java璇█鏁欑▼-43_绫婚泦妗嗘灦锛堜笁锛.mp4 鍗冮攱-java璇█鏁欑▼-42_绫婚泦妗嗘灦锛堜簩锛.mp4 鍗冮攱-java璇█鏁欑▼-41_绫婚泦妗嗘灦锛堜竴锛.mp4 鍗冮攱-java璇█鏁欑▼-40_...
  • C璇█绋嬪簭璁捐瀹為獙鏁欑▼浜烘皯閭數鍑虹増绀炬渶鏂板嚭鐗堝浘涔
    绛旓細浜烘皯閭數鍑虹増绀炬渶鏂板嚭鐗堜簡涓鏈悕涓恒C璇█绋嬪簭璁捐瀹為獙鏁欑▼銆嬬殑鏁欐潗锛岃涔﹂毝灞炰簬宸ヤ笟鍜屼俊鎭寲鏅氶珮绛夋暀鑲测滃崄浜屼簲鈥濊鍒掓暀鏉愮珛椤归」鐩紝灞炰簬21涓栫邯楂樼瓑瀛︽牎璁$畻鏈鸿鍒掓暀鏉愨斺旈珮鏍$郴鍒椼傝涔︾殑ISBN涓978-7-115-27217-1锛岀紪鐩垎绫讳负TP312銆傝涔︾敱鏉庡绁ヤ富缂栵紝閫傜敤浜嶤璇█绋嬪簭璁捐鍒濆鑰咃紝鍙綔涓洪珮鏍″悇涓撲笟...
  • C璇█绋嬪簭璁捐瀹炵敤鏁欑▼鍥句功鐩綍
    绛旓細棣栧厛锛屽簭瑷閮ㄥ垎涓鸿鑰呬粙缁嶄簡涔︾睄鐨勬讳綋鐩爣鍜岄噸瑕佹э紝甯姪鐞嗚В鍚庣画绔犺妭鐨勫唴瀹广傛帴鐫锛岀1绔犳繁鍏ユ帰璁绋嬪簭璁捐鐨勫熀鏈蹇靛拰C璇█鐨勬杩帮紝涓哄悗缁珷鑺傜殑瀛︿範濂犲畾浜嗗熀纭銆傚湪绗2绔狅紝璇昏呭皢瀛︿範C璇█鐨勫熀鏈暟鎹被鍨嬪拰瀹冧滑鐨勮繍绠楋紝杩欏寘鎷暣鍨嬨佹诞鐐瑰瀷绛夛紝浠ュ強濡備綍杩涜鍩烘湰鐨勭畻鏈拰閫昏緫杩愮畻銆傜3绔犺嚦绗5绔犲垎鍒瑙...
  • 璁$畻鏈轰笓涓氳冪爺鍩虹鍐呭
    绛旓細19鑰冪爺璁$畻鏈哄熀纭璇剧▼C璇█锛6锛.flv|005鈥19鑰冪爺璁$畻鏈哄熀纭璇剧▼C璇█锛5锛.mp4|004鈥19鑰冪爺璁$畻鏈哄熀纭璇剧▼C璇█锛4锛.mp4|003鈥19鑰冪爺璁$畻鏈哄熀纭璇剧▼C璇█锛3锛.mp4|002鈥19鑰冪爺璁$畻鏈哄熀纭璇剧▼C璇█锛2锛.mp4|001鈥19鑰冪爺璁$畻鏈哄熀纭璇剧▼C璇█锛1锛.mp4|029鈥19鑰冪爺璁$畻鏈哄熀纭璇剧▼鎿嶄綔绯荤粺绗簲绔.mp4...
  • 扩展阅读:苹果手机音频转换mp3 ... 手机上amr转换mp3 ... 五分钟不间断的音频mp3 ... 免费广告录音mp3 ... 免费在线音频转换mp3 ... 免费把录音转换成文字 ... 女生哮喘声音mp3 ... 免费的mp3音频转换器 ... mp3资源网 ...

    本站交流只代表网友个人观点,与本站立场无关
    欢迎反馈与建议,请联系电邮
    2024© 车视网