Haskell Music
~~~
brew cask install simplesynth
open -a SimpleSynth
stack install Euterpea
ghci
λ> :m Euterpea
λ> f l = mapM (\x -> play $ x (1/12)) l
λ> r f l = do; f l; r f l
λ> do; f [g 3,g 4];r f [a 4,
b 4,d 5,c 5,c 5,e 5,d 5,d 5,g 5,fs 5,g 5,d 5,b 4,
g 4,a 4,b 4,c 5,d 5,e 5,d 5,c 5,b 4,a 4,b 4,g 4,
fs 4,g 4,a 4,d 4,fs 4,a 4,c 5,b 4,a 4,b 4,g 4,a 4,
b 4,d 5,c 5,c 5,e 5,d 5,d 5,g 5,fs 5,g 5,d 5,b 4,
g 4,a 4,b 4,e 4,d 5,c 5,b 4,a 4,g 4,d 4,g 4,fs 4,
g 4,b 4]
~~~
~~~
λ> player l = play $ tempo 16 $ foldr (:+:) (a 0 0) $ map (\x -> x 1) l
λ> r player [g 3,g 4,a 4,b 4,d 5,c 5,c 5,e 5,d 5,d 5,g 5,fs 5,g 5,d 5,b 4,g 4,a 4,b 4,
c 5,d 5,e 5,d 5,c 5,b 4,a 4,b 4,g 4,fs 4,g 4,a 4,d 4,fs 4,a 4,c 5,b 4,a 4,b 4,
g 4,a 4,b 4,d 5,c 5,c 5,e 5,d 5,d 5,g 5,fs 5,g 5,d 5,b 4,g 4,a 4,b 4,e 4,d 5,c 5,
b 4,a 4,g 4,d 4,g 4,fs 4,g 4,b 4,d 5,g 5,d 5,b 4,g 4,b 4,d 5,f 5,d 5,b 4,g 4,b 4,d 5,e 5,c 5,a 4,
fs 4,a 4,b 4,d 5,b 4,g 4,e 4,g 4,b 4,d 5,b 4,a 4,fs 4,a 4,b 4,d 5,c 5,b 4]
~~~
go up to
~~~
λ> player n l = play $ tempo n $ foldr (:+:) (a 0 0) $ map (\x -> x 1) l
λ>
r f max min n up l = do;
f n l;
if n==max
then r f max min (n/2)(1/up) l
else if n==min
then r f max min(n * 2)(1/up) l
else r f max min(n*up) up l
λ> r player 16384 32 32 2 [g 2,g 4,a 4,b 4,d 5,c 5,c 5,e 5,d 5,d 5,g 5,fs 5,g 5,
d 5,b 4,g 4,a 4,b 4,c 5,d 5,e 5,d 5,c 5,b 4,a 4,b 4,g 4,fs 4,g 4,a 4,d 4,fs 4,
a 4,c 5,b 4,a 4,b 4,g 4,a 4,b 4,d 5,c 5,c 5,e 5,d 5,d 5,g 5,fs 5,g 5,d 5,b 4,g 4,
a 4,b 4,e 4,d 5,c 5,b 4,a 4,g 4,d 4,g 4,fs 4,g 4,b 4,d 5,g 5,d 5,b 4,g 4]
~~~