asteroid/cl-streamer/lame-ffi.lisp

93 lines
2.2 KiB
Common Lisp

(in-package #:cl-streamer)
(cffi:define-foreign-library liblame
(:unix (:or "libmp3lame.so.0" "libmp3lame.so"))
(:darwin "libmp3lame.dylib")
(:windows "libmp3lame.dll")
(t (:default "libmp3lame")))
(cffi:use-foreign-library liblame)
(cffi:defctype lame-global-flags :pointer)
(cffi:defcenum lame-vbr-mode
(:vbr-off 0)
(:vbr-mt 1)
(:vbr-rh 2)
(:vbr-abr 3)
(:vbr-mtrh 4)
(:vbr-default 4))
(cffi:defcenum lame-mode
(:stereo 0)
(:joint-stereo 1)
(:dual-channel 2)
(:mono 3))
(cffi:defcfun ("lame_init" lame-init) lame-global-flags)
(cffi:defcfun ("lame_close" lame-close) :int
(gfp lame-global-flags))
(cffi:defcfun ("lame_set_in_samplerate" lame-set-in-samplerate) :int
(gfp lame-global-flags)
(rate :int))
(cffi:defcfun ("lame_set_out_samplerate" lame-set-out-samplerate) :int
(gfp lame-global-flags)
(rate :int))
(cffi:defcfun ("lame_set_num_channels" lame-set-num-channels) :int
(gfp lame-global-flags)
(channels :int))
(cffi:defcfun ("lame_set_mode" lame-set-mode) :int
(gfp lame-global-flags)
(mode lame-mode))
(cffi:defcfun ("lame_set_quality" lame-set-quality) :int
(gfp lame-global-flags)
(quality :int))
(cffi:defcfun ("lame_set_brate" lame-set-brate) :int
(gfp lame-global-flags)
(brate :int))
(cffi:defcfun ("lame_set_VBR" lame-set-vbr) :int
(gfp lame-global-flags)
(vbr-mode lame-vbr-mode))
(cffi:defcfun ("lame_set_VBR_quality" lame-set-vbr-quality) :int
(gfp lame-global-flags)
(quality :float))
(cffi:defcfun ("lame_init_params" lame-init-params) :int
(gfp lame-global-flags))
(cffi:defcfun ("lame_encode_buffer_interleaved" lame-encode-buffer-interleaved) :int
(gfp lame-global-flags)
(pcm :pointer)
(num-samples :int)
(mp3buf :pointer)
(mp3buf-size :int))
(cffi:defcfun ("lame_encode_buffer" lame-encode-buffer) :int
(gfp lame-global-flags)
(buffer-l :pointer)
(buffer-r :pointer)
(num-samples :int)
(mp3buf :pointer)
(mp3buf-size :int))
(cffi:defcfun ("lame_encode_flush" lame-encode-flush) :int
(gfp lame-global-flags)
(mp3buf :pointer)
(mp3buf-size :int))
(cffi:defcfun ("lame_get_lametag_frame" lame-get-lametag-frame) :size
(gfp lame-global-flags)
(buffer :pointer)
(size :size))
(cffi:defcfun ("get_lame_version" get-lame-version) :string)