diff --git a/README b/README
--- a/README
+++ b/README
@@ -7,5 +7,5 @@
   http://haskell.org/
   http://audiosynth.com/
 
-(c) rohan drape and others, 2006-2010
+(c) rohan drape and others, 2006-2011
     gpl, http://gnu.org/copyleft/
diff --git a/Setup.hs b/Setup.hs
new file mode 100644
--- /dev/null
+++ b/Setup.hs
@@ -0,0 +1,3 @@
+#!/usr/bin/env runhaskell
+import Distribution.Simple
+main = defaultMain
diff --git a/Setup.lhs b/Setup.lhs
deleted file mode 100644
--- a/Setup.lhs
+++ /dev/null
@@ -1,3 +0,0 @@
-#!/usr/bin/env runhaskell
-> import Distribution.Simple
-> main = defaultMain
diff --git a/hsc3-graphs.cabal b/hsc3-graphs.cabal
--- a/hsc3-graphs.cabal
+++ b/hsc3-graphs.cabal
@@ -1,16 +1,16 @@
 Name:              hsc3-graphs
-Version:           0.8
+Version:           0.9
 Synopsis:          Haskell SuperCollider Graphs
 Description:       hsc3-graphs provides a collection of illustrative 
                    unit generator graphs for hsc3.
 License:           GPL
 Category:          Sound
-Copyright:         (c) Rohan Drape and others, 2006-2010
+Copyright:         (c) Rohan Drape and others, 2006-2011
 Author:            Rohan Drape
 Maintainer:        rd@slavepianos.org
 Stability:         Experimental
 Homepage:          http://slavepianos.org/rd/?t=hsc3-graphs
-Tested-With:       GHC == 6.10.3
+Tested-With:       GHC == 6.12.1
 Build-Type:        Simple
 Cabal-Version:     >= 1.6
 
@@ -18,396 +18,404 @@
 
 Executable         hsc3-adso
  main-is:          src/adso.lhs
- build-depends:    base==4.*, hosc==0.8, hsc3==0.8, random
+ build-depends:    base==4.*, hosc==0.9, hsc3==0.9, random
 
 Executable         hsc3-aleatoric-quartet
  main-is:          src/aleatoric-quartet.lhs
- build-depends:    base==4.*, hsc3==0.8
+ build-depends:    base==4.*, hsc3==0.9
 
 Executable         hsc3-analog-bubbles
  main-is:          src/analog-bubbles.lhs
- build-depends:    base==4.*, hsc3==0.8
+ build-depends:    base==4.*, hsc3==0.9
 
 Executable         hsc3-babbling-brook
  main-is:          src/babbling-brook.lhs
- build-depends:    base==4.*, hsc3==0.8
+ build-depends:    base==4.*, hsc3==0.9
 
 Executable         hsc3-birds
  main-is:          src/birds.lhs
- build-depends:    base==4.*, hsc3==0.8
+ build-depends:    base==4.*, hsc3==0.9
 
 Executable         hsc3-bit-reduction
  main-is:          src/bit-reduction.lhs
- build-depends:    base==4.*, hsc3==0.8
+ build-depends:    base==4.*, hsc3==0.9
 
 Executable         hsc3-bottle
  main-is:          src/bottle.lhs
- build-depends:    base==4.*, hsc3==0.8
+ build-depends:    base==4.*, hsc3==0.9
 
 Executable         hsc3-bowed-string
  main-is:          src/bowed-string.lhs
- build-depends:    base==4.*, hsc3==0.8
+ build-depends:    base==4.*, hsc3==0.9
 
 Executable         hsc3-ccomb
  main-is:          src/ccomb.lhs
- build-depends:    base==4.*, hsc3==0.8
+ build-depends:    base==4.*, hsc3==0.9
 
 Executable         hsc3-chain-saw
  main-is:          src/chain-saw.lhs
- build-depends:    base==4.*, hsc3==0.8
+ build-depends:    base==4.*, hsc3==0.9
 
 Executable         hsc3-chrd
  main-is:          src/chrd.lhs
- build-depends:    base==4.*, hsc3==0.8
+ build-depends:    base==4.*, hsc3==0.9
 
 Executable         hsc3-cricket
  main-is:          src/cricket.lhs
- build-depends:    base==4.*, hsc3==0.8
+ build-depends:    base==4.*, hsc3==0.9
 
 Executable         hsc3-crotale
  main-is:          src/crotale.lhs
- build-depends:    base==4.*, hsc3==0.8
+ build-depends:    base==4.*, hsc3==0.9
 
+Executable         hsc3-crotale-sine
+ main-is:          src/crotale-sine.lhs
+ build-depends:    base==4.*, hsc3==0.9
+
 Executable         hsc3-cut-outs
  main-is:          src/cut-outs.lhs
- build-depends:    base==4.*, hsc3==0.8
+ build-depends:    base==4.*, hsc3==0.9
 
 Executable         hsc3-cymbalism
  main-is:          src/cymbalism.lhs
- build-depends:    base==4.*, hsc3==0.8
+ build-depends:    base==4.*, hsc3==0.9
 
 Executable         hsc3-deep-sea
  main-is:          src/deep-sea.lhs
- build-depends:    base==4.*, hsc3==0.8
+ build-depends:    base==4.*, hsc3==0.9
 
 Executable         hsc3-default
  main-is:          src/default.lhs
- build-depends:    base==4.*, hsc3==0.8
+ build-depends:    base==4.*, hsc3==0.9
 
 Executable         hsc3-demanding-studies
  main-is:          src/demanding-studies.lhs
- build-depends:    base==4.*, hsc3==0.8
+ build-depends:    base==4.*, hsc3==0.9
 
 Executable         hsc3-dial-history
  main-is:          src/dial-history.lhs
- build-depends:    base==4.*, hsc3==0.8
+ build-depends:    base==4.*, hsc3==0.9
 
 Executable         hsc3-diffraction
  main-is:          src/diffraction.lhs
- build-depends:    base==4.*, hsc3==0.8
+ build-depends:    base==4.*, hsc3==0.9
 
 Executable         hsc3-discretion
  main-is:          src/discretion.lhs
- build-depends:    base==4.*, hsc3==0.8
+ build-depends:    base==4.*, hsc3==0.9
 
 Executable         hsc3-drummer
  main-is:          src/drummer.lhs
- build-depends:    base==4.*, hsc3==0.8
+ build-depends:    base==4.*, hsc3==0.9
 
 Executable         hsc3-eggcrate
  main-is:          src/eggcrate.lhs
- build-depends:    base==4.*, hsc3==0.8
+ build-depends:    base==4.*, hsc3==0.9
 
 Executable         hsc3-e-lamell
  main-is:          src/e-lamell.lhs
- build-depends:    base==4.*, hsc3==0.8
+ build-depends:    base==4.*, hsc3==0.9
 
 Executable         hsc3-fbl-fbf
  main-is:          src/fbl-fbf.lhs
- build-depends:    base==4.*, hsc3==0.8
+ build-depends:    base==4.*, hsc3==0.9
 
 Executable         hsc3-feedr
  main-is:          src/feedr.lhs
- build-depends:    base==4.*, hsc3==0.8
+ build-depends:    base==4.*, hsc3==0.9
 
 Executable         hsc3-f-lets
  main-is:          src/f-lets.lhs
- build-depends:    base==4.*, hsc3==0.8
+ build-depends:    base==4.*, hsc3==0.9
 
 Executable         hsc3-fm-iter
  main-is:          src/fm-iter.lhs
- build-depends:    base==4.*, hsc3==0.8
+ build-depends:    base==4.*, hsc3==0.9
 
 Executable         hsc3-fm-kltr
  main-is:          src/fm-kltr.lhs
- build-depends:    base==4.*, hsc3==0.8
+ build-depends:    base==4.*, hsc3==0.9
 
 Executable         hsc3-forest-sounds
  main-is:          src/forest-sounds.lhs
- build-depends:    base==4.*, hsc3==0.8
+ build-depends:    base==4.*, hsc3==0.9
 
 Executable         hsc3-fwalk
  main-is:          src/fwalk.lhs
- build-depends:    base==4.*, hsc3==0.8
+ build-depends:    base==4.*, hsc3==0.9
 
 Executable         hsc3-half-life
  main-is:          src/half-life.lhs
- build-depends:    base==4.*, hsc3==0.8
+ build-depends:    base==4.*, hsc3==0.9
 
+Executable         hsc3-hansm
+ main-is:          src/hansm.hs
+ build-depends:    base==4.*, hosc==0.9, hsc3==0.9
+
 Executable         hsc3-harmonic-swimming
  main-is:          src/harmonic-swimming.lhs
- build-depends:    base==4.*, hsc3==0.8
+ build-depends:    base==4.*, hsc3==0.9
 
 Executable         hsc3-harmonic-tumbling
  main-is:          src/harmonic-tumbling.lhs
- build-depends:    base==4.*, hsc3==0.8
+ build-depends:    base==4.*, hsc3==0.9
 
 Executable         hsc3-h-chatter
  main-is:          src/h-chatter.lhs
- build-depends:    base==4.*, hsc3==0.8
+ build-depends:    base==4.*, hsc3==0.9
 
 Executable         hsc3-hh-808
  main-is:          src/hh-808.lhs
- build-depends:    base==4.*, hsc3==0.8
+ build-depends:    base==4.*, hsc3==0.9
 
 Executable         hsc3-implosion
  main-is:          src/implosion.lhs
- build-depends:    base==4.*, hsc3==0.8
+ build-depends:    base==4.*, hsc3==0.9
 
 Executable         hsc3-insects
  main-is:          src/insects.lhs
- build-depends:    base==4.*, hsc3==0.8
+ build-depends:    base==4.*, hsc3==0.9
 
 Executable         hsc3-karplus-strong
  main-is:          src/karplus-strong.lhs
- build-depends:    base==4.*, hsc3==0.8
+ build-depends:    base==4.*, hsc3==0.9
 
 Executable         hsc3-klink
  main-is:          src/klink.lhs
- build-depends:    base==4.*, hsc3==0.8
+ build-depends:    base==4.*, hsc3==0.9
 
 Executable         hsc3-k-ppr
  main-is:          src/k-ppr.lhs
- build-depends:    base==4.*, hsc3==0.8
+ build-depends:    base==4.*, hsc3==0.9
 
 Executable         hsc3-lfo-modulation
  main-is:          src/lfo-modulation.lhs
- build-depends:    base==4.*, hsc3==0.8
+ build-depends:    base==4.*, hsc3==0.9
 
 Executable         hsc3-lf-pulses
  main-is:          src/lf-pulses.lhs
- build-depends:    base==4.*, hsc3==0.8
+ build-depends:    base==4.*, hsc3==0.9
 
 Executable         hsc3-lg-timed
  main-is:          src/lg-timed.lhs
- build-depends:    base==4.*, hsc3==0.8
+ build-depends:    base==4.*, hsc3==0.9
 
 Executable         hsc3-lin-sosc
  main-is:          src/lin-sosc.lhs
- build-depends:    base==4.*, hsc3==0.8
+ build-depends:    base==4.*, hsc3==0.9
 
 Executable         hsc3-lucier
  main-is:          src/lucier.hs
- build-depends:    base==4.*, hsc3==0.8
+ build-depends:    base==4.*, hsc3==0.9
 
 Executable         hsc3-modal-space
  main-is:          src/modal-space.lhs
- build-depends:    base==4.*, hsc3==0.8
+ build-depends:    base==4.*, hsc3==0.9
 
 Executable         hsc3-moto-rev
  main-is:          src/moto-rev.lhs
- build-depends:    base==4.*, hsc3==0.8
+ build-depends:    base==4.*, hsc3==0.9
 
 Executable         hsc3-mouse-clatter
  main-is:          src/mouse-clatter.lhs
- build-depends:    base==4.*, hsc3==0.8
+ build-depends:    base==4.*, hsc3==0.9
 
 Executable         hsc3-nharm
  main-is:          src/nharm.lhs
- build-depends:    base==4.*, hsc3==0.8
+ build-depends:    base==4.*, hsc3==0.9
 
 Executable         hsc3-noise-burst-sweep
  main-is:          src/noise-burst-sweep.lhs
- build-depends:    base==4.*, hsc3==0.8
+ build-depends:    base==4.*, hsc3==0.9
 
 Executable         hsc3-non-real-time
  main-is:          src/non-real-time.hs
- build-depends:    base==4.*, hosc==0.8, hsc3==0.8, process
+ build-depends:    base==4.*, hosc==0.9, hsc3==0.9, process
 
 Executable         hsc3-one-line
  main-is:          src/one-line.lhs
- build-depends:    base==4.*, hsc3==0.8
+ build-depends:    base==4.*, hsc3==0.9
 
 Executable         hsc3-oscillator-cluster
  main-is:          src/oscillator-cluster.lhs
- build-depends:    base==4.*, hsc3==0.8
+ build-depends:    base==4.*, hsc3==0.9
 
 Executable         hsc3-overlap-add
  main-is:          src/overlap-add.lhs
- build-depends:    base==4.*, hsc3==0.8
+ build-depends:    base==4.*, hsc3==0.9
 
 Executable         hsc3-pattern-buffer
  main-is:          src/pattern-buffer.lhs
- build-depends:    base==4.*, hsc3==0.8
+ build-depends:    base==4.*, hsc3==0.9
 
 Executable         hsc3-plucked-strings
  main-is:          src/plucked-strings.lhs
- build-depends:    base==4.*, hsc3==0.8
+ build-depends:    base==4.*, hsc3==0.9
 
 Executable         hsc3-police-state
  main-is:          src/police-state.lhs
- build-depends:    base==4.*, hsc3==0.8
+ build-depends:    base==4.*, hsc3==0.9
 
 Executable         hsc3-pulsing-bottles
  main-is:          src/pulsing-bottles.lhs
- build-depends:    base==4.*, hsc3==0.8
+ build-depends:    base==4.*, hsc3==0.9
 
 Executable         hsc3-record-scratcher
  main-is:          src/record-scratcher.lhs
- build-depends:    base==4.*, hsc3==0.8
+ build-depends:    base==4.*, hsc3==0.9
 
 Executable         hsc3-red-frik
  main-is:          src/red-frik.lhs
- build-depends:    base==4.*, hsc3==0.8
+ build-depends:    base==4.*, hsc3==0.9
 
 Executable         hsc3-reset
  main-is:          src/reset.hs
- build-depends:    base==4.*, hsc3==0.8
+ build-depends:    base==4.*, hsc3==0.9
 
 Executable         hsc3-reverberated-sine-percussion
  main-is:          src/reverberated-sine-percussion.lhs
- build-depends:    base==4.*, hsc3==0.8
+ build-depends:    base==4.*, hsc3==0.9
 
 Executable         hsc3-rm-octaver
  main-is:          src/rm-octaver.lhs
- build-depends:    base==4.*, hsc3==0.8
+ build-depends:    base==4.*, hsc3==0.9
 
 Executable         hsc3-sample-and-hold-liquidities
  main-is:          src/sample-and-hold-liquidities.lhs
- build-depends:    base==4.*, hsc3==0.8
+ build-depends:    base==4.*, hsc3==0.9
 
 Executable         hsc3-s-chirp
  main-is:          src/s-chirp.lhs
- build-depends:    base==4.*, hsc3==0.8
+ build-depends:    base==4.*, hsc3==0.9
 
 Executable         hsc3-scratchy
  main-is:          src/scratchy.lhs
- build-depends:    base==4.*, hsc3==0.8
+ build-depends:    base==4.*, hsc3==0.9
 
 Executable         hsc3-scratchy-m
  main-is:          src/scratchy-m.lhs
- build-depends:    base==4.*, hsc3==0.8
+ build-depends:    base==4.*, hsc3==0.9
 
 Executable         hsc3-scritto
  main-is:          src/scritto.lhs
- build-depends:    base==4.*, hsc3==0.8
+ build-depends:    base==4.*, hsc3==0.9
 
 Executable         hsc3-shepard-tones
  main-is:          src/shepard-tones.lhs
- build-depends:    base==4.*, hsc3==0.8
+ build-depends:    base==4.*, hsc3==0.9
 
 Executable         hsc3-shifting-pulses
  main-is:          src/shifting-pulses.lhs
- build-depends:    base==4.*, hsc3==0.8
+ build-depends:    base==4.*, hsc3==0.9
 
 Executable         hsc3-snare-909
  main-is:          src/snare-909.lhs
- build-depends:    base==4.*, hsc3==0.8
+ build-depends:    base==4.*, hsc3==0.9
 
 Executable         hsc3-sosc-lp
  main-is:          src/sosc-lp.lhs
- build-depends:    base==4.*, hsc3==0.8
+ build-depends:    base==4.*, hsc3==0.9
 
 Executable         hsc3-spe
  main-is:          src/spe.lhs
- build-depends:    base==4.*, hsc3==0.8
+ build-depends:    base==4.*, hsc3==0.9
 
 Executable         hsc3-sprinkler
  main-is:          src/sprinkler.lhs
- build-depends:    base==4.*, hsc3==0.8
+ build-depends:    base==4.*, hsc3==0.9
 
 Executable         hsc3-sprinkler-m
  main-is:          src/sprinkler-m.lhs
- build-depends:    base==4.*, hsc3==0.8
+ build-depends:    base==4.*, hsc3==0.9
 
 Executable         hsc3-strummable-guitar
  main-is:          src/strummable-guitar.lhs
- build-depends:    base==4.*, hsc3==0.8
+ build-depends:    base==4.*, hsc3==0.9
 
 Executable         hsc3-sweepy-noise
  main-is:          src/sweepy-noise.lhs
- build-depends:    base==4.*, hsc3==0.8
+ build-depends:    base==4.*, hsc3==0.9
 
 Executable         hsc3-synthetic-piano
  main-is:          src/synthetic-piano.lhs
- build-depends:    base==4.*, hsc3==0.8
+ build-depends:    base==4.*, hsc3==0.9
 
 Executable         hsc3-tank
  main-is:          src/tank.lhs
- build-depends:    base==4.*, hsc3==0.8
+ build-depends:    base==4.*, hsc3==0.9
 
 Executable         hsc3-tgb
  main-is:          src/tgb.lhs
- build-depends:    base==4.*, hsc3==0.8
+ build-depends:    base==4.*, hsc3==0.9
 
 Executable         hsc3-tgrn
  main-is:          src/tgrn.lhs
- build-depends:    base==4.*, hsc3==0.8
+ build-depends:    base==4.*, hsc3==0.9
 
 Executable         hsc3-tgr-rpr
  main-is:          src/tgr-rpr.lhs
- build-depends:    base==4.*, hsc3==0.8
+ build-depends:    base==4.*, hsc3==0.9
 
 Executable         hsc3-theremin
  main-is:          src/theremin.lhs
- build-depends:    base==4.*, hsc3==0.8
+ build-depends:    base==4.*, hsc3==0.9
 
 Executable         hsc3-three-cpsw
  main-is:          src/three-cpsw.lhs
- build-depends:    base==4.*, hsc3==0.8
+ build-depends:    base==4.*, hsc3==0.9
 
 Executable         hsc3-thx
  main-is:          src/thx.lhs
- build-depends:    base==4.*, hsc3==0.8
+ build-depends:    base==4.*, hsc3==0.9
 
 Executable         hsc3-tipnso
  main-is:          src/tipnso.lhs
- build-depends:    base==4.*, hsc3==0.8
+ build-depends:    base==4.*, hsc3==0.9
 
 Executable         hsc3-train
  main-is:          src/train.lhs
- build-depends:    base==4.*, hsc3==0.8
+ build-depends:    base==4.*, hsc3==0.9
 
 Executable         hsc3-trkl
  main-is:          src/trkl.lhs
- build-depends:    base==4.*, hsc3==0.8
+ build-depends:    base==4.*, hsc3==0.9
 
 Executable         hsc3-tr-out
  main-is:          src/tr-out.lhs
- build-depends:    base==4.*, hsc3==0.8
+ build-depends:    base==4.*, hsc3==0.9
 
 Executable         hsc3-tsort
  main-is:          src/tsort.lhs
- build-depends:    base==4.*, hsc3==0.8
+ build-depends:    base==4.*, hsc3==0.9
 
 Executable         hsc3-vlc-distrtn
  main-is:          src/vlc-distrtn.lhs
- build-depends:    base==4.*, hsc3==0.8
+ build-depends:    base==4.*, hsc3==0.9
 
 Executable         hsc3-waveset
  main-is:          src/waveset.hs
- build-depends:    array, base==4.*, hosc==0.8, hsc3==0.8, hsc3-sf==0.8, random
+ build-depends:    array, base==4.*, hosc==0.9, hsc3==0.9, hsc3-sf==0.9, random
 
 Executable         hsc3-what-was-i-thinking
  main-is:          src/what-was-i-thinking.lhs
- build-depends:    base==4.*, hsc3==0.8
+ build-depends:    base==4.*, hsc3==0.9
 
 Executable         hsc3-wial
  main-is:          src/wial.lhs
- build-depends:    base==4.*, hsc3==0.8
+ build-depends:    base==4.*, hsc3==0.9
 
 Executable         hsc3-wind-metals
  main-is:          src/wind-metals.lhs
- build-depends:    base==4.*, hsc3==0.8
+ build-depends:    base==4.*, hsc3==0.9
 
 Executable         hsc3-xy-interference
  main-is:          src/xy-interference.lhs
- build-depends:    base==4.*, hsc3==0.8
+ build-depends:    base==4.*, hsc3==0.9
 
 Executable         hsc3-xy-interference-m
  main-is:          src/xy-interference-m.lhs
- build-depends:    base==4.*, hsc3==0.8
+ build-depends:    base==4.*, hsc3==0.9
 
 Source-Repository  head
   Type:            darcs
-  Location:        http://slavepianos.org/~rd/sw/hsc3-graphs/
+  Location:        http://slavepianos.org/rd/sw/hsc3-graphs/
diff --git a/src/aleatoric-quartet.lhs b/src/aleatoric-quartet.lhs
--- a/src/aleatoric-quartet.lhs
+++ b/src/aleatoric-quartet.lhs
@@ -18,7 +18,7 @@
 >                           ; n0 <- lfNoise0 kr r0
 >                           ; let { m = n0 * 7 + base_mn + r1
 >                                 ; m' = lag (roundE m 1) 0.2 }
->                             in return (midiCPS m) } }
+>                             in return (midiCPS m') } }
 >       ; mk_s = do { f <- fmap recip mk_f
 >                   ; r <- rand (-1) 1
 >                   ; x <- do { n0 <- pinkNoise ar
diff --git a/src/analog-bubbles.lhs b/src/analog-bubbles.lhs
--- a/src/analog-bubbles.lhs
+++ b/src/analog-bubbles.lhs
@@ -11,4 +11,4 @@
 { var o = LFSaw.kr([8, 7.23], 0, 3, 80)
 ; var f = LFSaw.kr(0.4, 0, 24, o)
 ; var s = SinOsc.ar(f.midicps, 0, 0.04)
-; Out.ar(0, CombN.ar(s, 0.2, 0.2, 4)) }.play
+; Out.ar(0, CombN.ar(s, 0.2, 0.2, 4, 0.1)) }.play
diff --git a/src/crotale-sine.lhs b/src/crotale-sine.lhs
new file mode 100644
--- /dev/null
+++ b/src/crotale-sine.lhs
@@ -0,0 +1,170 @@
+crotale-sine (rd)
+
+> import Sound.SC3.ID
+
+> main =
+>     let { crotale = ( [ 35.45676040649414
+>                       , 128.59849548339844
+>                       , 346.9721984863281
+>                       , 483.5544128417969
+>                       , 1049.2449951171875
+>                       , 1564.0279541015625
+>                       , 1756.3399658203125
+>                       , 3391.666015625
+>                       , 3451.802001953125
+>                       , 3497.261962890625
+>                       , 3596.89794921875
+>                       , 3696.739013671875
+>                       , 3835.235107421875
+>                       , 3845.955078125
+>                       , 4254.85107421875
+>                       , 4407.533203125
+>                       , 4415.26416015625
+>                       , 4552.865234375
+>                       , 5538.076171875
+>                       , 5637.73681640625
+>                       , 5690.2978515625
+>                       , 5728.0068359375
+>                       , 5764.27685546875
+>                       , 5824.4189453125
+>                       , 6377.60498046875
+>                       , 6544.35009765625
+>                       , 6807.14404296875
+>                       , 6994.97021484375
+>                       , 7026.84619140625
+>                       , 7144.5859375
+>                       , 7269.61279296875
+>                       , 7393.6708984375
+>                       , 7897.259765625
+>                       , 8040.4580078125
+>                       , 8157.77099609375
+>                       , 8225.01953125
+>                       , 9126.150390625
+>                       , 9488.529296875
+>                       , 9916.408203125
+>                       , 10155.599609375
+>                       , 11715.9599609375
+>                       , 12111.830078125
+>                       , 12339.990234375
+>                       , 12417.669921875
+>                       , 12459.2802734375
+>                       , 12618.330078125
+>                       , 13116.490234375
+>                       , 13201.1298828125
+>                       , 13297.830078125
+>                       , 13533.75 ]
+>                     , [ 0.0012827360769733787
+>                       , 0.0008040848188102245
+>                       , 0.017361238598823547
+>                       , 0.004835359752178192
+>                       , 0.004413491114974022
+>                       , 0.004110544919967651
+>                       , 0.0003338181704748422
+>                       , 0.0036140112206339836
+>                       , 0.006919348146766424
+>                       , 0.0003224937245249748
+>                       , 0.0006031467346474528
+>                       , 0.06686479598283768
+>                       , 0.000605064386036247
+>                       , 0.003602313343435526
+>                       , 0.0002835785271599889
+>                       , 0.015243238769471645
+>                       , 0.020536603406071663
+>                       , 0.016677580773830414
+>                       , 0.0009245267719961703
+>                       , 0.20205098390579224
+>                       , 0.0012542791664600372
+>                       , 0.012705927714705467
+>                       , 0.0002523190632928163
+>                       , 0.0004866079252678901
+>                       , 0.0006429700297303498
+>                       , 0.0007763264584355056
+>                       , 0.2081160992383957
+>                       , 0.0024918108247220516
+>                       , 0.00193469924852252
+>                       , 0.005231771152466536
+>                       , 0.0069242212921381
+>                       , 0.001203975174576044
+>                       , 0.2050020843744278
+>                       , 0.04060448706150055
+>                       , 0.0038344631902873516
+>                       , 0.002189427148550749
+>                       , 0.18056060373783112
+>                       , 0.002192433224990964
+>                       , 0.006516554858535528
+>                       , 0.009982921183109283
+>                       , 0.004745401442050934
+>                       , 0.046154771000146866
+>                       , 0.000510294979903847
+>                       , 0.0018905038014054298
+>                       , 0.0019782145973294973
+>                       , 0.006729386281222105
+>                       , 0.0023426134139299393
+>                       , 0.0024002245627343655
+>                       , 0.03515550494194031
+>                       , 0.0014084168942645192 ]
+>                     , [ 5.203680992126465
+>                       , 1.7034343481063843
+>                       , 40.16516876220703
+>                       , 27.282501220703125
+>                       , 0.8950523138046265
+>                       , 42.84742736816406
+>                       , 2.6603667736053467
+>                       , 15.7678861618042
+>                       , 6.848367214202881
+>                       , 3.2325007915496826
+>                       , 1.7343382835388184
+>                       , 2.0202419757843018
+>                       , 4.7279052734375
+>                       , 9.400103569030762
+>                       , 0.7102512717247009
+>                       , 37.494625091552734
+>                       , 36.24879455566406
+>                       , 29.172658920288086
+>                       , 3.891019344329834
+>                       , 4.757885456085205
+>                       , 3.851426124572754
+>                       , 20.90781021118164
+>                       , 3.732874870300293
+>                       , 2.3834102153778076
+>                       , 10.443285942077637
+>                       , 8.795611381530762
+>                       , 20.98564338684082
+>                       , 18.01180076599121
+>                       , 25.297883987426758
+>                       , 14.819819450378418
+>                       , 42.39189910888672
+>                       , 2.9485135078430176
+>                       , 11.043763160705566
+>                       , 49.55165100097656
+>                       , 29.882694244384766
+>                       , 10.527188301086426
+>                       , 23.5572452545166
+>                       , 26.55561637878418
+>                       , 45.099605560302734
+>                       , 22.550390243530273
+>                       , 36.46126174926758
+>                       , 11.826201438903809
+>                       , 16.818185806274414
+>                       , 14.903121948242188
+>                       , 32.81113815307617
+>                       , 43.1389045715332
+>                       , 12.289558410644531
+>                       , 11.498942375183105
+>                       , 10.465788841247559
+>                       , 24.93169593811035 ] )
+>         ; (cf, ca, _) = crotale
+>         ; fn m f a = let { r0 = rand (f+0) 0 (2 * pi)
+>                          ; r1 = rand (f+1) 0.1 0.3
+>                          ; r2 = rand (f+2) 0.025 0.1
+>                          ; r3 = rand (f+3) 0 (2 * pi)
+>                          ; o = sinOsc AR (f * midiRatio m) r0
+>                          ; a' = a * sinOsc KR r1 0 }
+>                      in pan2 o (sinOsc KR r2 r3) a'
+>         ; oo = let { x = control KR "m" 1 }
+>                in out 0 (sum (zipWith (fn x) cf ca) * 0.1)
+>         }
+>   in withSC3 (\fd -> do { _ <- async fd (d_recv (synthdef "c" oo))
+>                         ; send fd (s_new "c" (-1) AddToTail 1 [("m",-12)])
+>                         ; send fd (s_new "c" (-1) AddToTail 1 [("m",-9)])
+>                         })
diff --git a/src/cut-outs.lhs b/src/cut-outs.lhs
--- a/src/cut-outs.lhs
+++ b/src/cut-outs.lhs
@@ -1,11 +1,14 @@
 cut-outs (rd)
 
 > import Sound.SC3.Monadic
+> import qualified Sound.SC3.ID as I
 
 > main =
 >   let { t = impulse ar 22 0 * (sinOsc kr 0.5 0 + 1)
->       ; x = mouseX kr 0.005 0.12 Exponential 0.1
->       ; y = mouseY kr 0.01 0.52 Exponential 0.1 
+>       ; x = linLin (I.lfNoise0 'a' KR 1) (-1) 1 0.005 0.012
+>    {- ; x = mouseX kr 0.005 0.12 Exponential 0.1 -}
+>       ; y = linLin (I.lfNoise0 'b' KR 1) (-1) 1 0.01 0.52
+>    {- ; y = mouseY kr 0.01 0.52 Exponential 0.1 -}
 >       ; n = do { n1 <- lfNoise0 kr 2
 >                ; n2 <- coinGate (0.05 + n1 + y * 0.4 + t * 0.5) (t * 0.5)
 >                ; n3 <- tExpRand (mce2 500 900) 1600 t
diff --git a/src/demanding-studies.lhs b/src/demanding-studies.lhs
--- a/src/demanding-studies.lhs
+++ b/src/demanding-studies.lhs
@@ -1,18 +1,19 @@
 demanding studies (jmcc)
 
-> import Sound.SC3.Monadic
+> import Sound.SC3.ID
 
 > main =
->   do { s1 <- drand dinf (mce [72, 75, 79, 82])
->      ; s2 <- drand 1 (mce [82, 84, 86])
->      ; s3 <- dseq dinf (mce [72, 75, 79, s2])
->      ; let { x = mouseX kr 5 13 Linear 0.2
->            ; tr = impulse kr x 0
->            ; f = demand tr 0 (mce [midiCPS (s1 - 12), midiCPS s3])
->            ; o1 = sinOsc ar (f + mce2 0 0.7) 0
->            ; o2 = saw ar (f + mce2 0 0.7) * 0.3
->            ; o3 = cubed (distort (log (distort (o1 + o2)))) }
->        in audition (out 0 (o3 * 0.1)) }
+>   let { s1 = drand 'a' dinf (mce [72, 75, 79, 82])
+>       ; s2 = drand 'b' 1 (mce [82, 84, 86])
+>       ; s3 = dseq 'c' dinf (mce [72, 75, 79, s2])
+>       ; x = linLin (lfNoise0 'd' KR 1) (-1) 1 5 13 
+>    {- ; x = mouseX kr 5 13 Linear 0.2 -}
+>       ; tr = impulse kr x 0
+>       ; f = demand tr 0 (mce [midiCPS (s1 - 12), midiCPS s3])
+>       ; o1 = sinOsc ar (f + mce2 0 0.7) 0
+>       ; o2 = saw ar (f + mce2 0 0.7) * 0.3
+>       ; o3 = cubed (distort (log (distort (o1 + o2)))) }
+>   in audition (out 0 (o3 * 0.1))
 
 { var s1 = Drand.new([72, 75, 79, 82], inf)
 ; var s2 = Drand.new([82, 84, 86], 1)
diff --git a/src/dial-history.lhs b/src/dial-history.lhs
--- a/src/dial-history.lhs
+++ b/src/dial-history.lhs
@@ -2,6 +2,7 @@
 
 > import Data.List
 > import Sound.SC3.Monadic
+> import qualified Sound.SC3.ID as I
 
 > main =
 >   let { mfv = [[697, 770, 852, 941], [1209, 1336, 1477, 1633]]
@@ -18,7 +19,8 @@
 >         ; d <- lfdNoise3 kr 0.5
 >         ; let { tr = trig (tDuty kr rate 0 DoNothing q 1) 0.09
 >               ; pat = latch tr tr
->               ; x = mouseX kr 0 1 Linear 0.2
+>               ; x = linLin (I.lfNoise0 'a' KR 1) (-1) 1 0 1
+>            {- ; x = mouseX kr 0 1 Linear 0.2 -}
 >               ; h = hasher (pat * x)
 >               ; which = trunc (range h 0 (constant (length numbers))) 1
 >               ; both = select which (mce_r numbers)
diff --git a/src/diffraction.lhs b/src/diffraction.lhs
--- a/src/diffraction.lhs
+++ b/src/diffraction.lhs
@@ -2,10 +2,13 @@
 
 > import Control.Monad
 > import Sound.SC3.Monadic
+> import qualified Sound.SC3.ID as I
 
 > main =
->   let { p = let { x = mouseX kr 0.001 0.02 Exponential 0.1
->                 ; y = mouseY kr 120 400 Exponential 0.1 }
+>   let { p = let { x = linLin (I.lfNoise0 'a' KR 1) (-1) 1 0.001 0.02 
+>              {- ; x = mouseX kr 0.001 0.02 Exponential 0.1 -}
+>                 ; y = linLin (I.lfNoise0 'b' KR 1) (-1) 1 120 400
+>              {- ; y = mouseY kr 120 400 Exponential 0.1 -} }
 >             in do { f <- fmap (* mce2 32 64) (lfNoise0 kr 4)
 >                   ; w <- fmap (* x) (lfNoise0 kr 32)
 >                   ; z <- fmap (* 0.1) (lfNoise0 kr 2)
@@ -15,8 +18,10 @@
 >       ; q = do { n <- lfNoise0 kr 128
 >                ; s <- p
 >                ; return (combN s 0.2 (n * 0.1 + 0.1) 3) }
->       ; r = let { x = mouseX kr 0.75 1.25 Exponential 0.1
->                 ; y = mouseY kr 0.25 1 Exponential 0.1
+>       ; r = let { x = linLin (I.lfNoise0 'c' KR 1) (-1) 1 0.75 1.25
+>              {- ; x = mouseX kr 0.75 1.25 Exponential 0.1 -}
+>                 ; y = linLin (I.lfNoise0 'c' KR 1) (-1) 1 0.25 1
+>              {- ; y = mouseY kr 0.25 1 Exponential 0.1 -}
 >                 ; f _ = do { fr <- fmap (* x) (rand 50 59)
 >                            ; am <- fmap (* y) (rand 0.04 0.16)
 >                            ; return (sinOsc ar fr 0 * am) } }
diff --git a/src/e-lamell.lhs b/src/e-lamell.lhs
--- a/src/e-lamell.lhs
+++ b/src/e-lamell.lhs
@@ -50,5 +50,5 @@
 >                                   ; return (mk_s_new f n d a l) }
 >                         ; send fd (Bundle now [p, q]) 
 >                         ; pauseThread 0.1 } }
->   in withSC3 (\fd -> do { sendSynth fd "blip" =<< e_lamell
+>   in withSC3 (\fd -> do { _ <- sendSynth fd "blip" =<< e_lamell
 >                         ; replicateM_ 64 (pattern fd) })
diff --git a/src/feedr.lhs b/src/feedr.lhs
--- a/src/feedr.lhs
+++ b/src/feedr.lhs
@@ -2,6 +2,7 @@
 warning: input/output feedback loop
 
 > import Sound.SC3.Monadic
+> import qualified Sound.SC3.ID as I
 
 > main =
 >   let { delayWr b i = recordBuf b 0 1 0 1 Loop 0 DoNothing i
@@ -11,7 +12,8 @@
 >                      ; g <- sequence (replicate n (rand 0.4 1.0))
 >                      ; f <- sequence (replicate n (rand 0.9 0.95))
 >                      ; let { d = zipWith (\p q -> tap 2 10 p * q) t g
->                            ; x = mouseX kr 0.02 1.0 Exponential 0.1
+>                         {- ; x = mouseX kr 0.02 1.0 Exponential 0.1 -}
+>                            ; x = linLin (I.lfNoise0 'a' KR 1) (-1) 1 0.02 1
 >                            ; s = clip2 (leakDC (hpf (sum d) 20) 0.995) 1
 >                            ; i = soundIn (mce2 0 1)
 >                            ; r = i + sum (map (* x) (zipWith (*) d f)) }
diff --git a/src/fm-kltr.lhs b/src/fm-kltr.lhs
--- a/src/fm-kltr.lhs
+++ b/src/fm-kltr.lhs
@@ -12,7 +12,7 @@
 >                ; r3 <- rand 0.975 1.025
 >                ; r4 <- rand 0.75 1.25
 >                ; let { o = control ir "out" 0
->                      ; t = control kr "trig" 0 {- unused -}
+>                   {- ; t = control kr "trig" 0 {- unused -} -}
 >                      ; a = control kr "amp" 0.1
 >                      ; d = control kr "dur" 0.1
 >                      ; f = control kr "freq" 400.0
@@ -45,5 +45,5 @@
 >              ; fm fd 53 ff a d i
 >              ; pauseThread t } }
 >   in withSC3 (\fd -> do { u <- gr
->                         ; async fd (d_recv (synthdef "fm" u))
+>                         ; _ <- async fd (d_recv (synthdef "fm" u))
 >                         ; sequence (replicate 32 (nd fd)) })
diff --git a/src/hansm.hs b/src/hansm.hs
new file mode 100644
--- /dev/null
+++ b/src/hansm.hs
@@ -0,0 +1,108 @@
+{-
+http://www.fredrikolofsson.com/f0blog/?q=node/457
+http://obiwannabe.co.uk/tutorials/html/tutorial_birds.html
+-}
+
+import Sound.OpenSoundControl
+import Sound.SC3
+
+type T3 a = (a,a,a)
+type Bird_Call_Param a = (T3 a,T3 a,T3 a,T3 a,T3 a)
+
+bird_call :: Bird_Call_Param UGen -> IO ()
+bird_call ((freq,atk,dcy)
+          ,(fmod1,atkf1,dcyf1)
+          ,(fmod2,atkf2,dcyf2)
+          ,(amod1,atka1,dcya1)
+          ,(amod2,atka2,dcya2)) =
+    let mk_env a aT dT g lS md =
+            let x = EnvNum (-4)
+                c = env [0,a,0] [aT,dT] [x,x] (-1) (-1)
+            in envGen AR g lS 0 1 md c
+	e = mk_env 0.5 atk dcy 1 1 RemoveSynth
+	freq1 = mk_env fmod1 atkf1 dcyf1 1 3000 DoNothing
+	freq2 = mk_env fmod2 atkf2 dcyf2 1 3000 DoNothing
+	amp1 = mk_env amod1 atka1 dcya1 1 1 DoNothing
+	amp2 = mk_env amod2 atka2 dcya2 1 1 DoNothing
+	fmod = sinOsc AR freq1 0 * amp1 + 1
+	amod = 1 - sinOsc AR freq2 0 * amp2
+	z = sinOsc AR ((freq * 7000 + 300) * fmod) 0 * amod
+    in audition (out 0 (pan2 z 0 e))
+
+triple_tailed_tree_troubler :: (Fractional a) => Bird_Call_Param a
+triple_tailed_tree_troubler =
+    ((0.387755, 0.0204082, 0.204082)
+    ,(0.367347, 0.571429, 0.734694)
+    ,(0.918367, 1, 0.77551)
+    ,(0.571429, 0.367347, 0.22449)
+    ,(0.0204082, 0.183673, 0.44898))
+
+speckled_throated_spew :: (Fractional a) => Bird_Call_Param a
+speckled_throated_spew =
+    ((0.183673, 0.591837, 0.387755)
+    ,(0.0104082, 0.530612, 0.346939)
+    ,(0.244898, 0.55102, 0.122449)
+    ,(0.387755, 1, 0.612245)
+    ,(0.346939, 0.816327, 0.653061))
+
+lesser_spotted_grinchwarbler :: (Fractional a) => Bird_Call_Param a
+lesser_spotted_grinchwarbler =
+    ((0.55102, 0.591837, 0.387755)
+    ,(0.0716327, 0.0204082, 0.346939)
+    ,(0.0204082, 0.55102, 0.122449)
+    ,(0.632653, 1, 0.612245)
+    ,(0.346939, 0.816327, 0.653061))
+
+long_toed_mudhopper :: (Fractional a) => Bird_Call_Param a
+long_toed_mudhopper =
+    ((0.163265, 0.22449, 0.183673)
+    ,(0.00306122, 0.122449, 1)
+    ,(0.0612245, 1, 0.77551)
+    ,(0.979592, 0.204082, 0.734694)
+    ,(1, 0.142857, 0.612245))
+
+yellow_yiffled_yaffle :: (Fractional a) => Bird_Call_Param a
+yellow_yiffled_yaffle =
+    ((0.0204082, 0.367347, 0.183673)
+    ,(0.0612245, 0, 1)
+    ,(0.285714, 0.22449, 0.489796)
+    ,(0.367347, 0.387755, 0.734694)
+    ,(0.204082, 0.428571, 0.142857))
+
+pointy_beaked_beetlefiend :: (Fractional a) => Bird_Call_Param a
+pointy_beaked_beetlefiend =
+    ((0.428571, 0.204082, 0.489796)
+    ,(0.0204082, 0.795918, 0.591837)
+    ,(0.285714, 0.22449, 0.489796)
+    ,(0.204082, 0.836735, 0.734694)
+    ,(0.77551, 0.428571, 0.142857))
+
+african_boojuboolubala :: (Fractional a) => Bird_Call_Param a
+african_boojuboolubala =
+    ((0.306122, 0.959184, 0.0408163)
+    ,(1, 0, 0.591837)
+    ,(0.285714, 0.22449, 0.489796)
+    ,(0.204082, 0.836735, 0.734694)
+    ,(0.77551, 0.428571, 0.142857))
+
+common_muckoink :: (Fractional a) => Bird_Call_Param a
+common_muckoink =
+    ((0.0204082, 0.8, 0.0816327)
+    ,(0.0204082, 0.001, 0.99)
+    ,(0.0204082, 0.01, 1)
+    ,(1, 0.142857, 0.734694)
+    ,(1, 0.0612245, 0.530612))
+
+main :: IO ()
+main = do
+  let xs = [triple_tailed_tree_troubler
+           ,speckled_throated_spew
+           ,lesser_spotted_grinchwarbler
+           ,long_toed_mudhopper
+           ,yellow_yiffled_yaffle
+           ,pointy_beaked_beetlefiend
+           ,african_boojuboolubala
+           ,common_muckoink]
+      fn x = bird_call x >> pauseThread 1.25
+  mapM_ fn xs
+
diff --git a/src/k-ppr.lhs b/src/k-ppr.lhs
--- a/src/k-ppr.lhs
+++ b/src/k-ppr.lhs
@@ -2,11 +2,14 @@
 
 > import Control.Monad
 > import Sound.SC3.Monadic
+> import qualified Sound.SC3.ID as I
 
 > main =
 >   let { wrp i l r = linLin i (-1) 1 l r
->       ; x = mouseX kr 0.05 0.35 Linear 0.1
->       ; y = mouseY kr 0.15 0.75 Linear 0.1
+>       ; x = linLin (I.lfNoise0 'a' KR 1) (-1) 1 0.05 0.35
+>    {- ; x = mouseX kr 0.05 0.35 Linear 0.1 -}
+>       ; y = linLin (I.lfNoise0 'b' KR 1) (-1) 1 0.15 0.75
+>    {- ; y = mouseY kr 0.15 0.75 Linear 0.1 -}
 >       ; ti = lfTri kr x 0
 >       ; tf = wrp ti 100 200
 >       ; t = impulse ar tf 0
diff --git a/src/lf-pulses.lhs b/src/lf-pulses.lhs
--- a/src/lf-pulses.lhs
+++ b/src/lf-pulses.lhs
@@ -1,11 +1,13 @@
 lf pulses (rd)
 
 > import Sound.SC3.Monadic
+> import qualified Sound.SC3.ID as I
 
 > main =
 >   do { n0 <- lfNoise0 AR (mce2 20 40)
 >      ; n1 <- lfNoise0 AR (mce2 5 10)
->      ; let { x = mouseX KR 0.012 0.19 Exponential 0.1
+>      ; let { x = linLin (I.lfNoise0 'a' KR 1) (-1) 1 0.012 0.19
+>         {- ; x = mouseX KR 0.012 0.19 Exponential 0.1 -}
 >            ; f = formlet (blip AR 10 12) (n0 * 43 + 700) 0.005 x 
 >            ; o = sinOsc AR 40 0 * n1 }
 >        in audition (out 0 (clip2 (leakDC (f + o) 0.995) 0.75)) }
diff --git a/src/lin-sosc.lhs b/src/lin-sosc.lhs
--- a/src/lin-sosc.lhs
+++ b/src/lin-sosc.lhs
@@ -3,12 +3,13 @@
 > import Control.Concurrent
 > import Control.Monad
 > import Sound.OpenSoundControl
-> import Sound.SC3
+> import Sound.SC3.ID
 > import System.Random
 
 > main =
->   let { n = 1024
->       ; x = mouseX KR 0.001 1.0 Linear 0.1
+>   let { n' = 1024
+>       ; x = linLin (lfNoise0 'a' KR 1) (-1) 1 0.001 1
+>    {- ; x = mouseX KR 0.001 1.0 Linear 0.1 -}
 >       ; tblM b = playBuf 1 b (x * bufRateScale KR b) 0 0 Loop DoNothing
 >       ; tblC b c = playBuf 1 b (in' 1 KR c * bufRateScale KR b) 0 0 Loop DoNothing
 >       ; o = sinOsc AR (tblM 0) 0 * tblM 1 
@@ -24,22 +25,22 @@
 >       ; twoPi = pi * 2.0
 >       ; srng l r e = let m = (l - r ) / 2
 >                      in m + l + (e * m) 
->       ; freq = [ lineTo n 440.0 444.0
->                , lineTo n 40.0 16000.0
->                , xlineTo n 40.0 16000.0
->                , map (srng 20 21000 . sin) (lineTo n 0.0 twoPi)
->                , map (srng 20 12000 . cos) (lineTo n 0.0 twoPi)
->                , map (srng 20 22000 . tan) (lineTo n 0.0 twoPi)
->                , map (srng 20 90 . tan) (lineTo n 0.0 twoPi) ]
->       ; ampl = [ lineTo n 0.1 1.0
->                , lineTo n 1.0 0.1
->                , lineTo n 0.5 0.01
->                , lineTo n 0.01 0.5
->                , xlineTo n 1.0 0.1
->                , xlineTo n 0.1 1.0
->                , map sin (lineTo n 0.0 twoPi)
->                , map cos (lineTo n 0.0 twoPi)
->                , map (* 0.001) (map tan (lineTo n 0 twoPi)) ]
+>       ; freq = [ lineTo n' 440.0 444.0
+>                , lineTo n' 40.0 16000.0
+>                , xlineTo n' 40.0 16000.0
+>                , map (srng 20 21000 . sin) (lineTo n' 0.0 twoPi)
+>                , map (srng 20 12000 . cos) (lineTo n' 0.0 twoPi)
+>                , map (srng 20 22000 . tan) (lineTo n' 0.0 twoPi)
+>                , map (srng 20 90 . tan) (lineTo n' 0.0 twoPi) ]
+>       ; ampl = [ lineTo n' 0.1 1.0
+>                , lineTo n' 1.0 0.1
+>                , lineTo n' 0.5 0.01
+>                , lineTo n' 0.01 0.5
+>                , xlineTo n' 1.0 0.1
+>                , xlineTo n' 0.1 1.0
+>                , map sin (lineTo n' 0.0 twoPi)
+>                , map cos (lineTo n' 0.0 twoPi)
+>                , map (* 0.001) (map tan (lineTo n' 0 twoPi)) ]
 >       ; sloc = [ 0.005, 0.0075, 0.01, 0.025, 0.05, 0.075
 >                , 0.1, 0.25, 0.5, 0.75
 >                , 0.8, 0.85, 1.0, 1.005 ]
@@ -52,7 +53,7 @@
 >                        ; send fd (b_setn 1 [(0, a)])
 >                        ; send fd (c_set [(0, s)])
 >                        ; pauseThread p } }
->   in do { withSC3 (\fd -> do { async fd (b_alloc 0 (floor n) 1)
->                              ; async fd (b_alloc 1 (floor n) 1)
->                              ; play fd (out 0 co) })
+>   in do { _ <- withSC3 (\fd -> do { _ <- async fd (b_alloc 0 (floor n') 1)
+>                                   ; _ <- async fd (b_alloc 1 (floor n') 1)
+>                                   ; play fd (out 0 co) })
 >         ; forkIO (withSC3 (\fd -> replicateM_ 128 (update fd))) }
diff --git a/src/non-real-time.hs b/src/non-real-time.hs
--- a/src/non-real-time.hs
+++ b/src/non-real-time.hs
@@ -16,11 +16,23 @@
         mk_instr = d_recv (synthdef "test" graph)
         mk_group = g_new [(1, AddToTail, 0)]
         mk_node t f = at t [s_new "test" (-1) AddToTail 1 [("freq", f)]]
-        notes = take 128 (zipWith mk_node [0.0, 0.05 ..] [330, 350 ..])
+        notes = take 128 (zipWith mk_node [1.0, 1.05 ..] [330, 350 ..])
     in at 0.0 [mk_instr, mk_group] : notes
 
-main :: IO ()
-main = do
-  writeNRT "/tmp/nrt.score" score
+perform :: [OSC] -> IO ()
+perform s = do
+  let f i fd x = do let (Bundle (NTPr t) x') = x
+                    pauseThreadUntil (i + t)
+                    send fd (Bundle immediately x')
+  withSC3 (\fd -> utcr >>= \i -> mapM_ (f i fd) s)
+
+render :: [OSC] -> IO ()
+render s = do
+  writeNRT "/tmp/nrt.score" s
   system "scsynth -N /tmp/nrt.score _ /tmp/nrt.wav 44100 WAVE float"
   return ()
+
+main :: IO ()
+main = do
+  render score
+  perform score
diff --git a/src/s-chirp.lhs b/src/s-chirp.lhs
--- a/src/s-chirp.lhs
+++ b/src/s-chirp.lhs
@@ -1,10 +1,13 @@
 s-chirp (rd)
 
 > import Sound.SC3.Monadic
+> import qualified Sound.SC3.ID as I
 
 > main =
->   let { x = mouseX kr 15 0 Linear 0.1
->       ; y = mouseY kr 15 27 Linear 0.1
+>   let { x = linLin (I.lfNoise0 'a' KR 1) (-1) 1 15 0
+>    {- ; x = mouseX kr 15 0 Linear 0.1 -}
+>       ; y = linLin (I.lfNoise0 'b' KR 1) (-1) 1 15 27
+>    {- ; y = mouseY kr 15 27 Linear 0.1 -}
 >       ; scl = [0, 2, 3.2, 5, 7, 9, 10] }
 >   in do { t <- dust kr 9
 >         ; b <- tChoose t (mce [36, 48, 60, 72])
@@ -18,6 +21,6 @@
 >                in do { r0 <- tRand 0.0075 0.125 u
 >                      ; r1 <- tRand 0.05 0.15 u
 >                      ; return (m * 0.5 + allpassC m 0.15 r0 r1) }
->         ; withSC3 (\fd -> do { async fd (b_alloc 0 7 1)
+>         ; withSC3 (\fd -> do { _ <- async fd (b_alloc 0 7 1)
 >                              ; send fd (b_setn1 0 0 scl)
 >                              ; play fd (out 0 o) }) }
diff --git a/src/tipnso.lhs b/src/tipnso.lhs
--- a/src/tipnso.lhs
+++ b/src/tipnso.lhs
@@ -1,9 +1,11 @@
 tipnso (rd)
 
 > import Sound.SC3.Monadic
+> import qualified Sound.SC3.ID as I
 
 > main =
->   let { x = mouseX kr 1 32 Linear 0.1
+>   let { x = linLin (I.lfNoise0 'a' KR 3) (-1) 1 1 32
+>    {- ; x = mouseX kr 1 32 Linear 0.1 -}
 >       ; t = impulse ar x 0 }
 >   in do { n1 <- tiRand 16 72 t
 >         ; n2 <- tiRand 0 1 t
