-- berlin 1977 (jmcc) #4 import Data.List {- base -} import Sound.DF.Uniform.GADT {- hdf -} sequ :: Int -> [Float] -> DF Bool -> DF Float sequ k l tr = let a = a_tbl k l n = genericLength l c = count_true tr `df_mod` n in a_read a c -- > draw berlin_1977 berlin_1977 :: DF () berlin_1977 = let clock_rate = 9 clock_time = 1 / clock_rate clock = impulse clock_rate 0 -- sequencer trigger tr = trigger clock note = sequ 0 [55,60,63,62,60,67,63,58] tr -- midi note pattern sequencer tr_16 = pulse_divider tr 16 0 -- divide tr by 16 note' = sequ 1 [-12,-7,-5,0,2,5] tr_16 + note -- transpose freq = midi_cps note' -- convert midi note to cycles per second env = decay2 clock (0.05 * clock_time) (2 * clock_time) amp = env * 0.1 + 0.02 -- amplitude envelope filt = env * (sin_osc 0.17 0 * 800) + 1400 -- filter frequency pw = sin_osc (mce2 0.08 0.09) 0 * 0.45 + 0.5 -- pulse width LFO(s) s = lf_pulse freq 0 pw * amp -- not bandlimited in out (comb_n [0,1] 0.2 (rlpf s filt 0.15) (mce2 0.2 0.17) 1.5) main :: IO () main = audition_rju [] berlin_1977