Skip to content

Instantly share code, notes, and snippets.

@Sciss
Last active October 28, 2015 16:22
Show Gist options
  • Select an option

  • Save Sciss/ae5e3ae549490044b573 to your computer and use it in GitHub Desktop.

Select an option

Save Sciss/ae5e3ae549490044b573 to your computer and use it in GitHub Desktop.
def mkDelay(in: GE, buf: GE): GE = {
val dt = BufDur.kr(buf)
DelayN.ar(in, dt, dt)
}
// returns (delayed source, shift90)
def HilbertFIR(in: GE, buf: GE): (GE, GE) = {
val fft = FFT(buf, in)
val pv = PV_PhaseShift90(fft)
val dly = mkDelay(in, buf)
val shift = IFFT.ar(pv)
(dly, shift)
}
val v = Var("var")
val dTime = Dim(v, "time")
val speed = UserValue("speed (Hz)", 0.05).kr
val lo = UserValue("low" , 0.0).kr
val hi = UserValue("high", 1.0).kr
val time = dTime.play(speed)
val raw = v.play(time, interp = /* 1 */ 2) \ 0
// raw .poll(Impulse.kr(speed))
// time.poll(Impulse.kr(speed))
val sig = raw.linlin(lo, hi, 0 /* -1 */, 1)
val c = UserValue("c", 0.25).kr
val df = UserValue("delta_f (Hz)", 0).kr
val fMod = df * 2.pow(sig * c)
val sin = SinOsc.ar(fMod, phase = 0.0)
val cos = SinOsc.ar(fMod, phase = 0.5 * math.Pi)
val hlbBuf = LocalBuf(4096)
val (hilbRe, hilbIm) = HilbertFIR(sig, hlbBuf)
val env = mkDelay(Line.ar(0, 1, 0.1), hlbBuf)
val out = LeakDC.ar(hilbRe * sin - hilbIm * cos) * env
Elapsed := time
output := Pan2.ar(out)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment