samer@0: (define set-step null) samer@0: (define line-on null) samer@0: (define line-off null) samer@0: (define _lineout null) samer@0: samer@0: (define-method (overlap-and-add x hop) samer@0: (define oa (OverlapAndAdd. x hop)) samer@0: (define line (LineOut. (.output oa))) samer@0: (.setWindow oa (Hanning.)) samer@0: (.setWindow line 0 hop) samer@0: (addtasks oa line) samer@0: (set! _lineout line) samer@0: (set! set-step (lambda (h) samer@0: (.setHop oa h) samer@0: (.setWindow line 0 h))) samer@0: ) samer@0: samer@0: (define-method (overlap-and-add sink x hop) samer@0: (define oa (OverlapAndAdd. x hop)) samer@0: (.setWindow oa (Hanning.)) samer@0: (addtasks oa (.writer sink (.array (.output oa)) 0 hop)) samer@0: ) samer@0: samer@0: (define-method (lineout (linein LineIn)) samer@0: (put "audio.scale" 1.0) samer@0: (let ((lineout (LineOut. (.output linein)))) samer@0: (.setWindow lineout 0 (.getStep linein)) samer@0: (set! set-step (lambda (n) samer@0: (.setStep linein n) samer@0: (.setWindow lineout 0 n))) samer@0: (set! line-on (lambda () samer@0: (.starting lineout) samer@0: (Thread.sleep 200L) samer@0: (addafter linein lineout))) samer@0: (set! line-off (lambda () samer@0: (remove lineout) samer@0: (.stopping lineout) samer@0: (Thread.sleep 200L))))) samer@0: samer@0: (define-method (lineout (in Vec)) samer@0: (let ((lineout (LineOut. in) (n (.size in))) samer@0: (tasklist (tasks))) samer@0: (set! set-step (lambda (m) samer@0: (.setWindow lineout (- n m) n))) samer@0: (set! line-on (lambda () samer@0: (.starting lineout) samer@0: (Thread.sleep 200L) samer@0: (.addTask tasklist lineout))) samer@0: (set! line-off (lambda () samer@0: (.removeTask tasklist lineout) samer@0: (.stopping lineout) samer@0: (Thread.sleep 200L))))) samer@0: samer@0: (define-method (lineout n) samer@0: (put "audio.scale" 32767.0) samer@0: (let ( (lineout (LineOut. n))) samer@0: (set! set-step (lambda (m) samer@0: (.setWindow lineout (- n m) n))) samer@0: (set! line-on (lambda () samer@0: (.starting lineout) samer@0: (Thread.sleep 200L) samer@0: (addtask lineout))) samer@0: (set! line-off (lambda () samer@0: (remove lineout) samer@0: (.stopping lineout) samer@0: (Thread.sleep 200L))))) samer@0: samer@0: