「2015年04月」の記事

ID3TAGについて調べてみる (2)

2015年4月20日 / C#, プログラミング

昨日のエントリは、書いてるうちにメンドくさくなって(違)適当にパパッとまとめてしまったので、ちょっとあんまりかなあと思ったので、改めて解説したいと思います。

まず、昨日のダンプリストをもう一度。縦軸を00000000からはじめるようにして、少し見やすくしてみます(変わらないか?)。

          +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
00000000: 54 41 47 83 82 83 65 82 BD 82 AD 82 C4 81 63 00
00000010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00000020: 00 83 4D 81 45 82 A8 82 C8 82 E7 82 B7 82 A2 82
00000030: B1 82 DD 91 E0 00 00 00 00 00 00 00 00 00 00 44
00000040: 52 49 4C 4C 20 4B 49 4E 47 20 41 4E 54 48 4F 4C
00000050: 4F 47 59 00 00 00 00 00 00 00 00 00 00 31 39 39
00000060: 34 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00000070: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 07 12

このデータを、ID3v1.1形式の構造にあわせて書き直します。

まずは “TAG” の識別子が3バイト。

          +0 +1 +2
00000000: 54 41 47

次に曲名が30バイト。

          +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
00000000:          83 82 83 65 82 BD 82 AD 82 C4 81 63 00
00000010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00000020: 00

83 82 で「モ」、83 65 で「テ」…と続き、81 63 で「…」までが「モテたくて…」という曲名を表しています。残りは 00 で埋められています。

その次がアーティスト名30バイト。

          +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
00000020:    83 4D 81 45 82 A8 82 C8 82 E7 82 B7 82 A2 82
00000030: B1 82 DD 91 E0 00 00 00 00 00 00 00 00 00 00

曲名と同じように、83 4D 「ギ」、81 45 「・」、82 A8 「お」、最終的に 91 E0 「隊」で「ギ・おならすいこみ隊」。…ってこんなクソまじめに「おならすいこみ隊」とか入力してるのもどうなのか。じゃあなんでこんな曲を選んだ俺。

アーティスト名の次はアルバム名が同じように30バイト。

          +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
00000030:                                              44
00000040: 52 49 4C 4C 20 4B 49 4E 47 20 41 4E 54 48 4F 4C
00000050: 4F 47 59 00 00 00 00 00 00 00 00 00 00

アルバム名はすべてアルファベットなので簡単です。44「D」、52「R」、49「I」、4C「L」、4C「L」…で「DRILL」です。「DRILL KING ANTHOLOGY」ですね。

ここから4バイトが日付文字列。正確には年ですけど。

          +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
00000050:                                        31 39 39
00000060: 34

これは簡単。「31 39 39 34」=「1994」です。ASCIIコードで。

つぎがコメント。ID3v1.0だと30バイトですが、29バイト目が00の場合は30バイト目がトラック番号として扱われます。もう少し正確に言うと、普通は00でパディングしてしまうので、29バイト目が00でなおかつ30バイト目が00以外の時にトラック番号として扱われるようです。

          +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
00000060:    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00000070: 00 00 00 00 00 00 00 00 00 00 00 00 00

今回は29バイト目は00で30バイト目が07なので、トラック番号7になります。

          +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
00000070:                                        00 07

最後はジャンル番号です。

          +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
00000070:                                              12

Wikipediaでは147(0x93)までしか載っていませんが、SCMPXという初期のmp3プレイヤーが勝手に拡張したジャンルコードとして以下のものが使われています。

コード(10進) コード(16進) 説明
248 0xF8 Heavy Rock(J)
249 0xF9 Doom Rock(J)
250 0xFA J-POP(J)
251 0xFB Seiyu(J)
252 0xFC Tecno Ambient(J)
253 0xFD Moemoe(J)
254 0xFE Tokusatsu(J)
255 0xFF Anime(J)

ちなみに0x12は「Techno」。DRILL KING ANTHOLOGYは電気グルーヴのアルバムですから、やはりテクノなのではないかと。

という感じでID3v1.1タグの詳細な解説でした。次こそはID3v2タグの説明を書くつもりです。

ID3TAGについて調べてみる (1)

2015年4月19日 / C#, プログラミング

たまには技術的な話題を書いておかないと…と思っていたので、初めて書いてみます。

以前わんくま勉強会でもTARファイルとZIPファイルのフォーマットについてセッションを持ったことがありますが、その手のファイルフォーマットで何か面白いものはないか…と思っていたところ、前から興味があったmp3ファイルのID3タグについてちょっと調べてみました。

ID3v1タグはmp3ファイルの終端128バイトを使って格納されていて、サイズも固定なので処理しやすい…のだけど、なにせ曲名やアーティスト名を格納する場所が30バイトしかないので、現在ではほとんど利用されていません。僕の手持ちのファイルも「せっかくだから設定している」程度です。

まずはWikipediaからパクったID3v1.1形式の構造がこちら。

開始位置 長さ 説明
0 3 “TAG” の識別子3文字
3 30 曲名文字列。
33 30 アーティスト文字列。
63 30 アルバム文字列。
93 4 日付文字列。
97 28 または 30 コメント文字列。
125 1 コメント文字列が 28 バイト以内の場合に 0 が格納される。
126 1 トラック番号。
127 1 ジャンル番号。

v1とv1.1の違いは125バイト目が0x00の場合に126バイト目にトラック番号が入ります。ただし、126バイト目が0x00の場合はトラック番号として認識されません。

それを踏まえて、とあるmp3ファイルの最後尾128バイトのダンプを見てみます。

          +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +A +B +C +D +E +F
005C8A10: 54 41 47 83 82 83 65 82 BD 82 AD 82 C4 81 63 00 
005C8A20: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
005C8A30: 00 83 4D 81 45 82 A8 82 C8 82 E7 82 B7 82 A2 82 
005C8A40: B1 82 DD 91 E0 00 00 00 00 00 00 00 00 00 00 44 
005C8A50: 52 49 4C 4C 20 4B 49 4E 47 20 41 4E 54 48 4F 4C 
005C8A60: 4F 47 59 00 00 00 00 00 00 00 00 00 00 31 39 39 
005C8A70: 34 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 
005C8A80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 07 12 

これをID3v1フォーマットに合わせて出力をしてみると、こんな感じになります。

ID3ヘッダ      : "TAG"
曲名           : "モテたくて…"
アーティスト名 : "ギ・おならすいこみ隊"
アルバム名     : "DRILL KING ANTHOLOGY"
日付           : "1994"
コメント       : ""
トラック番号   : 7
ジャンル       : Techno (0x12)

ということで、ギ・おならすいこみ隊のモテたくて…でした。でしたってなんだその曲。選曲の時点でどうなんだそれっていう。

mp3ファイルを指定すると上記の形式で出力してくれるコンソールプログラムを作ったので、公開してみます。簡単なプログラムだけど、なんか楽しいです。

ID3TAG.zip (5kb)

今回はここまで。次回はID3v2タグについて研究します。

ぽぴ王子、公国やめるってよ

2015年4月1日 / お知らせ

ドーモ、ドクシャ=サン。ぽぴ王子です。

長らくご無沙汰しておりますが、皆さまいかがお過ごしでしょうか。というか読んでる人はいるのかという程の情報の無さと放置振りというていたらく。

 

さて、そんなことを言うためにわざわざエイプリルフールに更新してるんじゃありません。

2014年から絶賛放置プレイ…じゃなかった、開設して『なんとなく気が乗らない』的なノリでそのままになってしまっている当サイトですけれども、このたび少しは腰を上げてみてもいいのではないかと思ったわけです。床ずれにもなりますしね(そういう問題じゃない)。

で、何をするかと言いますと、元々“ぽぴ公国”と名乗ってきた当サイトですが、このたび名称変更をしようと思います。ぽぴ公国からぽぴ王国へ。

公国が王国になったぐらいで何が変わるかと言っても特に何が変わるわけではないのですが、暫定のままになっているサイトデザインだとか、ブログなんかも暫定のままにせず、もう少しいろいろやっていけたらなあ…という意思表示も込めて。

 

とりあえず、公国を王国に書き換える作業をちょこっとやりました。今のところはそれだけです。今後、ええ今後どうなるかはわからないながらももうちょっとなんとかしようね、という気持ちを持っていきたいです。ハイ。

そんなわけで今後ともぽぴ公国 改め ぽぴ王国をよろしくお願いいたします。

TOPへ戻る