yammer/yammer/fftw.scm

38 lines
1.1 KiB
Scheme

(define-module (yammer fftw)
#:use-module (system foreign)
#:export (FFTW_ESTIMATE
fftw_plan_dft_r2c_1d
fftw_destroy_plan ;))
init_plan
do-dft))
(define fftw (dynamic-link "libfftw3"))
(define FFTW_ESTIMATE 48)
(define fftw_plan_dft_r2c_1d
(pointer->procedure '*
(dynamic-func "fftw_plan_dft_r2c_1d" fftw)
(list int '* '* unsigned-int)))
(define fftw_destroy_plan
(pointer->procedure void
(dynamic-func "fftw_destroy_plan" fftw)
(list '*)))
(define libyammer (dynamic-link "libyammer"))
(define do_dft
(pointer->procedure '*
(dynamic-func "do_dft" libyammer)
(list '* '* int)))
(define init_plan
(pointer->procedure '*
(dynamic-func "init_plan" libyammer)
(list int)))
(define (do-dft plan lst len)
(define out (do_dft plan (bytevector->pointer (list->s16vector lst)) len))
(pointer->bytevector out (floor/ len 2) (sizeof short) 's16))