# FFTW-based replacement for fft.bqn (unused; see reverb.bqn) plan ← "*:i32" Fn ← "/usr/lib/libfftw3.so.3"⊸•FFI createPlan ← Fn plan‿"fftw_plan_dft_1d"‿"i32"‿"*f64"‿"&f64"‿"i32"‿"i32" destroyPlan ← Fn ""‿"fftw_destroy_plan"‿plan executePlan ← Fn ""‿"fftw_execute"‿plan { 𝕨𝕊⁼𝕩: (-𝕨1⊘≢¯1)𝕊𝕩 ; "FFT argument must be a list or have two list cells" ! (3⌊=)◶⟨0,1,2=≠,0⟩𝕩 Enc ← ⍉⌽ 𝕩 ↩ (2↑≍)⍟(2>=) 𝕩 dir ← -⟜¬ 𝕨≡¯1 sh ← 1⊑≢𝕩 in ← ⥊ Enc 𝕩 plan‿out ← CreatePlan ⟨sh,in,0¨in,dir,2⋆6⟩ ExecutePlan ⟨plan⟩ DestroyPlan ⟨plan⟩ ÷⟜sh⍟(1=dir) Enc⁼ sh‿2 ⥊ out }