aboutsummaryrefslogtreecommitdiff
path: root/fftw.bqn
blob: 1808db71a78757b8097d8af4c528189c52900f9f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 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 𝕩
  planout  CreatePlan sh,in,0¨in,dir,26
  ExecutePlan plan
  DestroyPlan plan
  ÷sh(1=dir) Enc sh2  out
}