Rubyでmp3のタグをいじるには3
タグの中身が取れたぜ! イェイ。
#!/usr/bin/env ruby $KCODE="sjis" require "dl/import" module Id3lib extend DL::Importable dlload "id3lib.dll" typealias("ID3_Tag", "void") typealias("ID3_Frame", "void") typealias("ID3_FrameID", "int") typealias("ID3_Field", "void") typealias("ID3_FieldID", "int") typealias("luint", "long") ID3FID_ALBUM=29 ID3FID_TITLE=47 ID3FN_TEXT=2 extern "ID3_Tag *ID3Tag_New()" extern "long ID3Tag_Link ( ID3_Tag *, char *)" extern "ID3_Frame * ID3Tag_FindFrameWithID(ID3_Tag *, ID3_FrameID)" extern "ID3_Field *ID3Frame_GetField ( ID3_Frame *, ID3_FieldID)" extern "luint ID3Field_GetASCII ( ID3_Field *, char *, luint , luint)" #extern "" end tag=Id3lib.iD3Tag_New Id3lib.iD3Tag_Link(tag, "test.mp3") fid=Id3lib::ID3FID_ALBUM frame=Id3lib.iD3Tag_FindFrameWithID(tag, fid) field=Id3lib.iD3Frame_GetField(frame, Id3lib::ID3FN_TEXT) bufsize=1024 str="\0"*bufsize size=Id3lib.iD3Field_GetASCII(field, str, bufsize, 0) p str[0...size]
externの書き方にクセがあって、プロトタイプそのままだとエラー出ます。
- セミコロンを取る
- 変数名を削除
- 閉じカッコの直前に空白があってはいけない
めもめも。
あと、externで定義したメソッド名の頭は、強制的に小文字になります。
dl.soのリファレンスにも明記してあるんだけど、小一時間悩んじゃったから書いておく。
ていうか、めんどくさいからモジュール定義の中で
alias new iD3Tag_New
とかしてしまうのが吉ならん。
あとはタグの書き込みだけやね。