packages feed

hsc3-graphs-0.11: src/mridangam.hs

-- mridangam (jmcc)

import Sound.OpenSoundControl {- hosc -}
import Sound.SC3.ID {- hsc3 -}
import Sound.SC3.Lang.Pattern.ID {- hsc3-lang -}

spe3_mridangam :: Synthdef
spe3_mridangam =
    let t_amp = tr_control "t_amp" 1
        n = whiteNoise 'a' AR * 70
        e = decay2 t_amp 0.002 0.1
	o = distort (resonz (n * e) (midiCPS 60) 0.02 * 4) * 0.4
    in synthdef "mridangam" (out 0 o)

spe3_drone :: Synthdef
spe3_drone =
    let s1 = saw AR (midiCPS (mce2 60 60.04))
        s2 = saw AR (midiCPS (mce2 67 67.04))
        o = lpf (s1 + s2) (midiCPS 108)	* 0.007
    in synthdef "drone" (out 0 o)

p :: [P Double]
p =
    [pseq [0.0] 10
    -- intro
    ,pseq [0.9,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0] 2
    ,pseq [0.9,0.0,0.0,0.2,0.0,0.0,0.0,0.2,0.0,0.0] 2
    ,pseq [0.9,0.0,0.0,0.2,0.0,0.2,0.0,0.2,0.0,0.0] 2
    ,pseq [0.9,0.0,0.0,0.2,0.0,0.0,0.0,0.2,0.0,0.2] 2
    -- solo
    ,prand 'a' [pseq [0.9,0.0,0.0,0.7,0.0,0.2,0.0,0.7,0.0,0.0] 1
               ,pseq [0.9,0.2,0.0,0.7,0.0,0.2,0.0,0.7,0.0,0.0] 1
	       ,pseq [0.9,0.0,0.0,0.7,0.0,0.2,0.0,0.7,0.0,0.2] 1
	       ,pseq [0.9,0.0,0.0,0.7,0.2,0.2,0.0,0.7,0.0,0.0] 1
	       ,pseq [0.9,0.0,0.0,0.7,0.0,0.2,0.2,0.7,0.2,0.0] 1
	       ,pseq [0.9,0.2,0.2,0.7,0.2,0.2,0.2,0.7,0.2,0.2] 1
	       ,pseq [0.9,0.2,0.2,0.7,0.2,0.2,0.2,0.7,0.0,0.0] 1
	       ,pseq [0.9,0.0,0.0,0.7,0.2,0.2,0.2,0.7,0.0,0.0] 1
	       ,pseq [0.9,0.0,0.4,0.0,0.4,0.0,0.4,0.0,0.4,0.0] 1
	       ,pseq [0.9,0.0,0.0,0.4,0.0,0.0,0.4,0.2,0.4,0.2] 1
	       ,pseq [0.9,0.0,0.2,0.7,0.0,0.2,0.0,0.7,0.0,0.0] 1
	       ,pseq [0.9,0.0,0.0,0.7,0.0,0.0,0.0,0.7,0.0,0.0] 1
	       ,pseq [0.9,0.7,0.7,0.0,0.0,0.2,0.2,0.2,0.0,0.0] 1
	       ,pseq [0.9,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0] 1] 30
    -- tehai
    ,pseq [2.0,0.0,0.2,0.5,0.0,0.2,0.9
	  ,1.5,0.0,0.2,0.5,0.0,0.2,0.9
	  ,1.5,0.0,0.2,0.5,0.0,0.2] 3
    -- sam
    ,pseq [5] 1]

act :: Transport t => t -> IO ()
act fd = do
  play fd spe3_drone
  _ <- async fd (d_recv spe3_mridangam)
  let p' = pmono_d spe3_mridangam 100 [("t_amp",pseq p 1),("dur",1/8)]
  play fd p'

main :: IO ()
main = withSC3 act