packages feed

hsc3-graphs-0.11: src/early-space-music-lp-side-two.hs

-- early space music LP, side 2 (jmcc)

import Sound.SC3.ID
import qualified Sound.SC3.Lang.Random.Gen as R
import Sound.SC3.Lang.Control.OverlapTexture
import qualified System.Random as R

m1 :: UGen
m1 =
    let a = rand 'a' 0 20
	b = rand 'b' 0 5000
	c = rand 'c' 0 20
	p = rand 'd' (-1) 1
    in pan2 (sinOsc AR (sinOsc AR a 0 * 0.1 * b + b) 0 * sinOsc KR c 0 * 0.08 + 0.08) p 1

m2 :: UGen
m2 =
    let a0 = rand 'a' 40 240
	a1 = a0 + rand 'b' (-1) 1
	a = mce2 a0 a1
	b = expRand 'c' 50 2400
	c = mce2 (a0 + rand 'd' (-1) 1) (a1 + rand 'e' (-1) 1)
    in sinOsc AR (sinOsc AR a 0 * rand 'f' 0 1 * b + b) 0 * sinOsc KR c 0 * 0.025 + 0.025

m3 :: UGen
m3 =
    let f = midiCPS (rand 'a' 60 100)
    in fSinOsc AR (mce2 f (f + 0.2)) 0 * lfNoise2 'b' KR (f * mce2 0.15 0.16) * 0.1

m4 :: UGen
m4 =
    let f = midiCPS (rand 'a' 24 96)
	r = xLine KR (expRand 'b' 0.1 20) (expRand 'c' 0.1 20) 25.6 DoNothing
        a = lfPulse KR (expRand 'd' 0.2 1.2) 0 (rand 'e' 0.1 0.2)
        o i = let e = max 0 (sinOsc KR (r * rand 'f' 0.9 1.1) (rand 'g' 0 (2 * pi)) * 0.1 - 0.05)
                  s = fSinOsc AR (f * i + f) 0 * e * (1 / (i + 1))
              in pan2 s (rand i (-1) 1) 1
    in sum (uprotect' 'a' (map o [0..11])) * a

m6 :: UGen
m6 =
    let f = midiCPS (lfNoise1 'a' KR (rand 'b' 0 0.3) * 60 + 70)
        a0 = lfNoise2 'c' AR (f * rand 'd' 0 0.5)
        a1 = max 0 (lfNoise1 'e' KR (rand 'f' 0 8) * sinOsc KR (rand 'g' 0 40) 0 * 0.1)
	z = sinOsc AR f 0 * a0 * a1
    in pan2 z (lfNoise1 'h' KR (rand 'i' 0 5)) 1

enumFromN :: Enum a => a -> Int -> [Int]
enumFromN e i = let j = fromEnum e in [j .. j + i]

m7 :: UGen
m7 =
    let p = 15
        z = let y = let fr = map (\e -> expRand e 100 6000) (enumFromN 'a' p)
                        rt = map (\e -> rand e 2 6) (enumFromN 'a' p)
                    in klankSpec fr (replicate p 1) rt
            in uclone 'a' 2 y
        f = xLine KR (expRand 'α' 40 300) (expRand 'β' 40 300) 12 DoNothing
        t = lfPulse AR f 0 (rand 'γ' 0.1 0.9) * 0.002 * max 0 (lfNoise2 'δ' KR (rand 'ε' 0 8))
    in distort (klank t 1 0 1 (mceTranspose z)) * 0.3

esmlp2 :: R.RandomGen g => g -> (UGen, g)
esmlp2 = R.choose (map (* 0.3) [m1,m2,m3,m4,m6,m7])

esmlp2_pp :: UGen -> UGen
esmlp2_pp i =
    let c = combN i 0.3 (mce2 (rand 'a' 0.1 0.3) (rand 'a' 0.12 0.32)) 8
    in mix (uclone 'a' 5 c) * 0.3

main :: IO ()
main = do
  let g = R.mkStdGen 0
  overlapTextureS_pp (2,4,6,maxBound) esmlp2 g 2 esmlp2_pp

{-
audition (out 0 (m6 * 0.5))
Sound.SC3.UGen.Dot.draw m7
-}