view src/scheme/lineout.scm @ 1:5df24c91468d

Oh my what a mess.
author samer
date Fri, 05 Apr 2019 16:26:00 +0100
parents bf79fb79ee13
children
line wrap: on
line source
(define set-step null)
(define line-on null)
(define line-off null)
(define _lineout null)




;;; Audio output from given vector to given AudioSink
;;; Task is added to current task list, and functions line-on
;;; and line-off are defined to insert and remove the lineout task.
;;; Function set-step defined to change hop size.
;;; Optional final parameter is hop size
(define-method (lineout sink (in Vec) hop)
	(let ((out 		(LineOut. in sink))
			(tlist 	(tasks)))
		(set! set-step (lambda (m) (.setWindow out 0 m)))
		(set! line-on (lambda ()
			(.starting out) (Thread.sleep 200L)
			(.addTask tlist out)))
		(set! line-off (lambda ()
			(.removeTask tlist out)
			(.stopping out) (Thread.sleep 200L)))
		(set-step hop)
		(addtasks out)
		out))
			
(define-method (lineout (in Vec)) (lineout (linesnk) in))
(define-method (lineout sink (in Vec)) (lineout sink in (.size in)))
(define-method (lineout sink (in LineIn))
	(put "lineout.scale" 1.0)
	(let ((out (lineout sink (.output in))))
		(set-step (.getStep in))
		(set! set-step (lambda (n)
			(.setStep in n)
			(.setWindow out 0 n)))))

(define-method (overlap-and-add sink x hop)
	(define oa  (OverlapAndAdd. x hop))
	(define line (LineOut. (.output oa) sink))
	(.setWindow oa (Hanning.))
	(.setWindow line 0 hop)
	(addtasks oa line)
	(set! _lineout line)
	(set! set-step (lambda (h)
		(.setHop oa h)
		(.setWindow line 0 h)))
	line)