38 lines
1.1 KiB
Scheme
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))
|