Add delay test. Debug delay and get it working.
[ModSynth.git] / com / wha / modsynth / Delay.scala
blob696b225202985f1902c4bcbb80a1326deb3968f5
1 package com.wha.modsynth;
3 import de.gulden.framework.jjack.JJackSystem
5 class Delay (n: String) extends Module {
6 val name = n
7 controls += "time" -> 250.0
8 controls += "mixSig" -> 75.0
9 controls += "mixFx" -> 50.0
10 controls += "outSig" -> 75.0
11 controls += "outFx" -> 50.0
12 var ring: List[FloatRingBuffer] = Nil
14 def computePut(mixSig: Float, mixFx: Float)(sig: Float)(fx: Float): Float = {
15 val x = sig * mixSig + fx * mixFx
16 //println (x + " ")
20 override def transformAudio(buf: List[List[float]]): List[List[float]] = {
21 val sampleRate = JJackSystem.getSampleRate
22 val time = controls("time")
23 val diff = (time * sampleRate / 1000).toInt
24 if (ring == Nil) List.range(0, buf.size).foreach(x => ring = new FloatRingBuffer(diff) :: ring)
25 else ring.foreach(x => x.resize(diff))
27 val mixSig = controls("mixSig") / 100
28 val mixFx = controls("mixFx") / 100
29 val outSig = controls("outSig") / 100
30 val outFx = controls("outFx") / 100
31 val compFxMix = computePut(mixSig.toFloat, mixFx.toFloat)_
32 val compSigMix = computePut(outSig.toFloat, outFx.toFloat)_
33 for (channel <- buf; ringbuf <- ring)
34 yield {
35 var i = 0
36 for (sample <- channel)
37 yield {
38 //if (i == 0) {println(sample + " "); i = 1}
39 val compFx = compFxMix(sample)
40 val compSig = compSigMix(sample)
41 compSig(ringbuf.getPut(compFx))