/************************************************************************ * MP3 ID3v1.x タグ 簡易編集エディタ * http://homepage2.nifty.com/MJHS/ (by イノビア) * ライセンス : ご自由に改変して利用して構いません。 *************************************************************************/ // 参考にしたもの // 技術メモ : 2007.11.6 ID3タグ仕様(mp3タグ) // http://pub.ne.jp/matsuk/?entry_id=1019865 // mp3infp (SDK)ソースコード内 Id3tagv1.cpp から // http://win32lab.com/fsw/mp3infp/ sdim genre,32,256 genre="Blues","Classic Rock","Country","Dance","Disco","Funk","Grunge","Hip-Hop","Jazz","Metal","New Age","Oldies","Other","Pop","R&B","Rap","Reggae","Rock","Techno","Industrial","Alternative","Ska","Death Metal","Pranks","Soundtrack","Euro-Techno","Ambient","Trip-Hop","Vocal","Jazz+Funk","Fusion","Trance","Classical","Instrumental","Acid","House","Game","Sound Clip","Gospel","Noise","Alt. Rock","Bass","Soul","Punk","Space","Meditative","Instrumental Pop","Instrumental Rock","Ethnic","Gothic","Darkwave","Techno-Industrial","Electronic","Pop-Folk","Eurodance","Dream","Southern Rock","Comedy","Cult","Gangsta Rap","Top 40","Christian Rap","Pop/Funk","Jungle","Native American","Cabaret","New Wave","Psychedelic","Rave","Showtunes","Trailer","Lo-Fi","Tribal","Acid Punk","Acid Jazz","Polka","Retro","Musical","Rock & Roll","Hard Rock","Folk","Folk/Rock","National Folk","Swing","Fast-Fusion","Bebob","Latin","Revival","Celtic","Bluegrass","Avantgarde","Gothic Rock","Progressive Rock","Psychedelic Rock","Symphonic Rock","Slow Rock","Big Band","Chorus","Easy Listening","Acoustic","Humour","Speech","Chanson","Opera","Chamber Music","Sonata","Symphony","Booty Bass","Primus","Porn Groove","Satire","Slow Jam","Club","Tango","Samba","Folklore","Ballad","Power Ballad","Rhythmic Soul","Freestyle","Duet","Punk Rock","Drum Solo","A Cappella","Euro-House","Dance Hall","Goa","Drum & Bass","Club-House","Hardcore","Terror","Indie","BritPop","Negerpunk","Polsk Punk","Beat","Christian Gangsta Rap","Heavy Metal","Black Metal","Crossover","Contemporary Christian","Christian Rock","Merengue","Salsa","Thrash Metal","Anime","JPop","Synthpop","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Heavy Rock(J)","Doom Rock(J)","J-POP(J)","Seiyu(J)","Tecno Ambient(J)","Moemoe(J)","Tokusatsu(J)","Anime(J)" title "MP3 ID3v1.x タグ 簡易編集エディタ":width 460,280 dialog "mp3",16,"MP3ファイル" if stat=0:end fname=refstr exist fname mp3filesize=strsize //変更されていないかどうか調べる為、一応保存しておく sdim buf,128 bload fname,buf,128,mp3filesize-128 if "TAG"!=strmid(buf,0,3){ //ID3v1.xタグがない場合 dialog "ID3V1タグが見つかりません。\n新規に作ります。" ver=0 sdim data,30,7 }else{ //ID3v1.x既存のタグがある場合 //判定は126byte=<0と127byte=<0ときは1.0 //判定は126byte=0と127byte=0ときは1.0 //判定は126byte=0と127byte<0ときは1.1 if 0=peek(buf,125){ if 0!=peek(buf,126){ ver=11 }else{ ver=10 } }else{ ver=10 } sdim data,30,7//配列変数で確保 ;data.0=strmid(buf,3,30) //曲名 memcpy data.0,buf,30,0,3 ;data.1=strmid(buf,33,30)//アーティスト memcpy data.1,buf,30,0,33 ;data.2=strmid(buf,63,30) //アルバム memcpy data.2,buf,30,0,63 ;data.3=strmid(buf,93,4) //年 memcpy data.3,buf,4,0,93 if ver=11{//ID3V1.1 ;data.4= strmid(buf,97,28)//コメント memcpy data.4,buf,28,0,97 data.5=""+peek(buf,126) //トラック data.6=""+peek(buf,127) //ジャンル }else{//ID3V1.0 ;data.4=strmid(buf,97,30) //コメント memcpy data.4,buf,30,0,97 data.5="" data.6=""+peek(buf,127) //ジャンル } } // ここから画面を描く redraw 0 _genre="" repeat 256:_genre+=""+genre(cnt)+"\n":loop g_id=int(data.6) font msgothic,12:objsize 300,16 pos 32,32:mes "ファイル名\t:": pos 120,32: mes getpath(fname,8) pos 32,64:mes "曲名\t:": pos 120,64: input data.0,,,30 pos 32,84:mes "アーティスト\t:": pos 120,84: input data.1,,,30 pos 32,104:mes "アルバム\t:": pos 120,104:input data.2,,,30 pos 32,124:mes "年\t:": pos 120,124:input data.3,,,4 pos 32,144:mes "コメント\t:": pos 120,144:input data.4,,,30 pos 32,164:mes "トラック\t:": pos 120,164:input data.5,,,30 pos 32,188:mes "ジャンル\t:": pos 120,184:combox g_id,300,_genre pos 120,220:objsize 300,30:button "OK(&O)",*write redraw 1 stop *write //不正な文字がないか入力チェック if 30