c-wrapper と id3lib で MP3 情報とる

かえる三十郎 - Rubyでmp3のタグをいじるには3の内容を Gauche に移植してみました。

(use gauche.uvector)
(use c-wrapper)

(define (main args)
  (c-load-library "libid3")
  (c-include "id3.h")
  (let* ((tag (ID3Tag_New))
         (#f (ID3Tag_Link tag "test.mp3"))
         (frame (ID3Tag_FindFrameWithID tag ID3FID_ALBUM))
         (field (ID3Frame_GetField frame ID3FN_TEXT))
         (buf (make-u8vector 1024))
         (size (ID3Field_GetASCII field (cast <c-ptr> buf) 1024))
         (album (u8vector->string buf 0 (- size 1))))
    (print album)))

これに、misc_support.hの内容に相当する関数を Scheme 側で付け足してやれば、差し当たって十分だね。

ライブラリ側で得たメモリの解放に付いてはまた後で調べる。