annotate src/scheme/lineout.scm @ 8:5e3cbbf173aa tip

Reorganise some more
author samer
date Fri, 05 Apr 2019 22:41:58 +0100
parents bf79fb79ee13
children
rev   line source
samer@0 1 (define set-step null)
samer@0 2 (define line-on null)
samer@0 3 (define line-off null)
samer@0 4 (define _lineout null)
samer@0 5
samer@0 6
samer@0 7
samer@0 8
samer@0 9 ;;; Audio output from given vector to given AudioSink
samer@0 10 ;;; Task is added to current task list, and functions line-on
samer@0 11 ;;; and line-off are defined to insert and remove the lineout task.
samer@0 12 ;;; Function set-step defined to change hop size.
samer@0 13 ;;; Optional final parameter is hop size
samer@0 14 (define-method (lineout sink (in Vec) hop)
samer@0 15 (let ((out (LineOut. in sink))
samer@0 16 (tlist (tasks)))
samer@0 17 (set! set-step (lambda (m) (.setWindow out 0 m)))
samer@0 18 (set! line-on (lambda ()
samer@0 19 (.starting out) (Thread.sleep 200L)
samer@0 20 (.addTask tlist out)))
samer@0 21 (set! line-off (lambda ()
samer@0 22 (.removeTask tlist out)
samer@0 23 (.stopping out) (Thread.sleep 200L)))
samer@0 24 (set-step hop)
samer@0 25 (addtasks out)
samer@0 26 out))
samer@0 27
samer@0 28 (define-method (lineout (in Vec)) (lineout (linesnk) in))
samer@0 29 (define-method (lineout sink (in Vec)) (lineout sink in (.size in)))
samer@0 30 (define-method (lineout sink (in LineIn))
samer@0 31 (put "lineout.scale" 1.0)
samer@0 32 (let ((out (lineout sink (.output in))))
samer@0 33 (set-step (.getStep in))
samer@0 34 (set! set-step (lambda (n)
samer@0 35 (.setStep in n)
samer@0 36 (.setWindow out 0 n)))))
samer@0 37
samer@0 38 (define-method (overlap-and-add sink x hop)
samer@0 39 (define oa (OverlapAndAdd. x hop))
samer@0 40 (define line (LineOut. (.output oa) sink))
samer@0 41 (.setWindow oa (Hanning.))
samer@0 42 (.setWindow line 0 hop)
samer@0 43 (addtasks oa line)
samer@0 44 (set! _lineout line)
samer@0 45 (set! set-step (lambda (h)
samer@0 46 (.setHop oa h)
samer@0 47 (.setWindow line 0 h)))
samer@0 48 line)
samer@0 49