packages feed

hsc3-graphs-0.14: gr/ambient1.hs

-- http://sccode.org/1-1y
-- some edits......

import Sound.SC3 {- hsc3 -}
import Sound.SC3.Lang.Pattern {- hsc3-lang -}

chain :: a -> [a -> a] -> a
chain n ff =
    case ff of
      [] -> n
      f:ff' -> chain (f n) ff'

chain0 :: Num a => [a -> a] -> a
chain0 = chain 0

pulse_u :: UGen
pulse_u =
    let k = control KR
        f = k "freq" 440
        a = k "amp" 0.1
        aT = k "attackTime" 0.01
        dT = k "delayTime" 10
        e = envGen KR 1 1 0 1 RemoveSynth (envPerc aT 10)
        z = sinOsc AR f 0 * 0.7
        o = let l = sinOsc KR 3 0
            in pan2 (toggleFF (tDelay z dT) * sinOsc AR f 0) l 0.6
        s = clip2 ((pan2 z (sinOsc KR 5 pi) 0.7 + o) * e) 1
    in out 0 (freeVerb s 0.7 1.0 0.4 * a)

drone_u :: UGen
drone_u =
    let k = control KR
        f = k "freq" 440
        a = k "amp" 0.1
        ph = k "phase" 0
        e = envGen KR 1 1 0 1 RemoveSynth (envSine 10 1)
        s = chain0 [\_ -> lfPulse AR f 0 0.15
                   ,\o -> rlpf o (sinOsc KR 0.3 0 * 200 + 1500) 0.1
                   ,\o -> freeVerb o 0.5 0.5 0.5 * e
                   ,\o -> pan2 o (sinOsc KR (1/10) ph) a]
    in out 0 s

bass_u :: UGen
bass_u =
    let k = control KR
        f = k "freq" 96
        a = k "amp" 0.1
        e = envGen KR 1 1 0 1 RemoveSynth (envPerc' 0.5 1 1 (EnvLin,EnvLin))
        s = sinOsc AR f 0 * a * e
    in out 0 (pan2 s 0 1)

{-
audition pulse_u
audition drone_u
audition bass_u
-}

pulse_i :: Instr
pulse_i = Instr_Def (synthdef "pulse" pulse_u) False

drone_i :: Instr
drone_i = Instr_Def (synthdef "drone" drone_u) False

bass_i :: Instr
bass_i = Instr_Def (synthdef "bass" bass_u) False

dur_p :: Fractional a => P a
dur_p = prand 'β' [3,0.7,1,0.5] inf

pulse_p :: P_Bind
pulse_p =
    [(K_instr,pinstr' pulse_i)
    ,(K_dur,dur_p * 10)
    ,(K_midinote,prand 'α' [59,72,76,79,81,88,90] inf)
    ,(K_amp,pwhite 'β' 0.2 0.27 inf)
    ,(K_param "attackTime",pwhite 'γ' 0 7 inf)
    ,(K_param "delayTime",0.02)]

drone_p :: P_Bind
drone_p =
    [(K_instr,pinstr' drone_i)
    ,(K_dur,dur_p)
    ,(K_midinote,prand 'α' [31,40,45,64,68,69] inf)
    ,(K_amp,pwhite 'β' 0.03 0.08 inf * 0.7)
    ,(K_param "phase",pwrand 'γ' [0,4.7123] [0.5,0.5] inf)]

bass_p :: P_Bind
bass_p =
    [(K_instr,pinstr' bass_i)
    ,(K_dur,dur_p)
    ,(K_midinote,31)
    ,(K_amp,0.3)]

main :: IO ()
main = do
  let p = ppar [pbind pulse_p
               ,pbind drone_p
               ,pbind bass_p]
  audition p