In [14]:
import Vivid
import Control.Concurrent
import Control.Monad (forM_)

wobble :: SynthDef
wobble = sd [("noteNum", 0)] $ do
   s <- 50 ~* (sinOsc (Freq 10) ? KR)
   s1 <- 0.1 ~* sinOsc (Freq $ midiCPS "noteNum" ~+ s)
   out 0 [s1, s1]
In [15]:
s <- synth wobble [("noteNum", 38)]
t <- forkIO $ do
   let notes = take 12
         [ x | x <- [38..], (x `mod` 12) `elem` [0,3,5] ]
   forM_ (cycle notes) $ \note -> do
      set s [("noteNum", toEnum note)]
      sleep 0.2
In [16]:
do
    killThread t
    free s