Source

cl-taglib / cl-taglib.lisp

;;;; cl-taglib.lisp

(in-package #:cl-taglib)

;;; "cl-taglib" goes here. Hacks and glory await!
(define-foreign-library taglib
  (t (:default "libtag_c")))

(use-foreign-library taglib)

(defcfun (set-strings-unicode "taglib_set_strings_unicode") :void
  (unicode :boolean))

(defcfun (set-string-management "taglib_set_string_management_enabled") :void
  (mangement :boolean))

(defcfun (free "taglib_free") :void
  (str :pointer))

(defcfun (file-new "taglib_file_new") :pointer
  (filename :string))

(defcfun (file-free "taglib_file_free") :void
  (file :pointer))

(defcfun (file-is-valid "taglib_file_is_valid") :boolean
  (file :pointer))

(defcfun (file-tag "taglib_file_tag") :pointer
  (file :pointer))

;;; taglib_file_audioproperties
;;; taglib_file_save

(defmacro taglib-accessor-for (slot)
  (let* ((slot-name (string-downcase (string slot)))
	 (function-name (intern (string-upcase (concatenate 'string "tag-" slot-name))))
	 (foreign-name (concatenate 'string "taglib_tag_" slot-name)))
    `(defcfun (,function-name ,foreign-name) :string+ptr
       (tag :pointer))))

(taglib-accessor-for :title)
(taglib-accessor-for :artist)
(taglib-accessor-for :album)
(taglib-accessor-for :comment)
(taglib-accessor-for :genre)
(taglib-accessor-for :year)
(taglib-accessor-for :track)