ctypesでmp3infpのメモ

タイトル「まぶた」、アーティスト「arp」、というID3v1+v2タグが入ったmab.mp3というファイルをカレントディレクトリにおいて、Pythonインタラクティブを起動。

mp3infptest>python
Python 2.5 (r25:51908, Sep 19 2006, 09:52:17) [MSC v.1310 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> from ctypes import *
>>> mp3infp = windll.mp3infp
>>> mp3infp.mp3infp_Load(0, "mab.mp3")
0
>>> mp3infp.mp3infp_mp3_GetTagType()
83
>>> hex(83)  #値はbitのorで、入っているタグのフォーマットを表す。
             #0x03はIDv1+IDv2を、0x50はIDv1.1+IDv2.3を表している。
'0x53'
>>> pstr = c_char_p()          #文字列の先頭ポインタ型を...
>>> mp3infp.mp3infp_GetValue("AFMT", byref(pstr))
1                              #byrefで渡して中にポインタを入れてもらう.
>>> pstr.value
'MPEG1.0 Layer3 188Kb/s(VBR) 44100Hz J-Stereo 11513frames'
>>> mp3infp.mp3infp_GetValue("INAM_v2", byref(pstr))
1
>>> pstr.value
'\x82\xdc\x82\xd4\x82\xbd'
>>> print pstr.value  # mp3infp.dllは、システムエンコーディング
                      # (=SJIS)でタグを返す。ID3v2のUnicodeタグでも。
まぶた

ちなみに,mp3infp.dllはmp3infpをインストールすればsystem32に入ってるからそのまま使える。
mp3infp.dllがexportしている関数とか使用する定数の一覧は、mp3infpのSDKのmp3infp_ExportFunc.hを見れば判る。

このブログに乗せているコードは引用を除き CC0 1.0 で提供します。