Something went wrong. Try again.
Monorepo for Aesthetic.Computer aesthetic.computer
Something went wrong. Try again.
1234567891011121314151617181920212223242526272829303132333435363738394041;;; ALSA PCM bindings via CFFI
(in-package :ac-native.alsa)
(cffi:define-foreign-library libasound (:unix "libasound.so.2"))
(cffi:use-foreign-library libasound)
;;; PCM(cffi:defcfun ("snd_pcm_open" pcm-open%) :int (pcm :pointer) (name :string) (stream :int) (mode :int))
(defun pcm-open (name &key (stream 0) (mode 0)) "Open an ALSA PCM device. Returns (values pcm-handle error-code)." (cffi:with-foreign-object (handle :pointer) (let ((err (pcm-open% handle name stream mode))) (values (if (zerop err) (cffi:mem-ref handle :pointer) nil) err))))
(cffi:defcfun ("snd_pcm_close" pcm-close) :int (pcm :pointer))(cffi:defcfun ("snd_pcm_prepare" pcm-prepare) :int (pcm :pointer))(cffi:defcfun ("snd_pcm_writei" pcm-writei) :long (pcm :pointer) (buffer :pointer) (size :unsigned-long))(cffi:defcfun ("snd_pcm_recover" pcm-recover) :int (pcm :pointer) (err :int) (silent :int))
;;; Simplified setup(cffi:defcfun ("snd_pcm_set_params" pcm-set-params) :int (pcm :pointer) (format :int) (access :int) (channels :unsigned-int) (rate :unsigned-int) (soft-resample :int) (latency :unsigned-int))
;;; Constants(defconstant +snd-pcm-stream-playback+ 0)(defconstant +snd-pcm-stream-capture+ 1)(defconstant +snd-pcm-format-s16-le+ 2)(defconstant +snd-pcm-format-float-le+ 14)(defconstant +snd-pcm-access-rw-interleaved+ 3)
;;; Error strings(cffi:defcfun ("snd_strerror" snd-strerror) :string (errnum :int))