yammer/yammer/ffi.scm

81 lines
2.2 KiB
Scheme

(define-module (yammer ffi)
#:use-module (system foreign)
#:export (FFTW_ESTIMATE
fftw_destroy_plan
init_plan
do-dft
make-pa-simple
read_from_pa
pa_simple_free))
(add-to-load-path
(string-append
(if (getenv "XDG_CONFIG_HOME")
(getenv "XDG_CONFIG_HOME")
(string-append (getenv "HOME") "/.config"))
"/yammer"))
(load-from-path "config.scm")
(define fftw #f)
(define pulseaudio #f)
(define libyammer (dynamic-link "libyammer"))
(define FFTW_ESTIMATE #f)
(define fftw_destroy_plan #f)
(define do_dft #f)
(define init_plan #f)
(define (do-dft plan lst len) #f)
(define make_pa_simple #f)
(define (make-pa-simple rate dev) #f)
(define read_from_pa #f)
(define pa_simple_free #f)
(if using-fftw?
(begin
(set! fftw (dynamic-link "libfftw3"))
(set! FFTW_ESTIMATE 48)
(set! fftw_destroy_plan
(pointer->procedure void
(dynamic-func "fftw_destroy_plan" fftw)
(list '*)))
(set! do_dft
(pointer->procedure '*
(dynamic-func "do_dft" libyammer)
(list '* '* int)))
(set! init_plan
(pointer->procedure '*
(dynamic-func "init_plan" libyammer)
(list int)))
(set! do-dft
(lambda (plan lst len)
(define out (do_dft plan (bytevector->pointer (list->s16vector lst)) len))
(pointer->bytevector out (floor/ len 2) (sizeof short) 's16)))))
(if using-pulse?
(begin
(set! pulseaudio (dynamic-link "libpulse-simple"))
(set! make_pa_simple
(pointer->procedure '*
(dynamic-func "make_pa_simple" libyammer)
(list unsigned-int '* int)))
(set! make-pa-simple
(lambda (rate dev latency)
(make_pa_simple rate (string->pointer dev latency))))
(set! read_from_pa
(pointer->procedure '*
(dynamic-func "read_from_pa" libyammer)
(list '* size_t)))
(set! pa_simple_free
(pointer->procedure void
(dynamic-func "pa_simple_free" pulseaudio)
(list '*)))))