(Old) Haskell Sound LibraryThis Haskell sound library can be used to create music by writing a Haskell program. It consists of some EDSLs to describe musical and other structures and outputs the result into a WAV file or a Midi file. Example
import Data.Ratio
import Data.List
import Data.Complex
import Sound
import SoundTools
import Voice
main = do { main1; main2; main3; main4; main5 }
main1 = saveWavSignal "example1_1.wav" $ Mono $ take 100000 $ sinus $ repeat 5.0
main2 = saveWavSignal "example1_2.wav" $ Mono $ zipWith (*) (playEnv 10000 env) (saw $ repeat 2.5)
where
env :: Env
env = Env FitADR EnvLine (1,2,0.3,4)
main3 = saveWavSignal "example1_3.wav" $
Mono $ karplus_strong 400
karplus_strong :: Int -> [Double]
karplus_strong n =
let output = take n (noise (-1.0, 1.0)) ++
zipWith (\x y -> x*0.5 + y*0.49) output (tail output)
in terminateAt 100 ((<0.005).abs) $ output
main4 = let m = map (*0.7) $ sinus $ map ((*0.05).(+2.0)) $ sinus $ repeat 0.01
in saveWavSignal "example1_4.wav" $ Stereo $ zipWith panorama m (karplus_strong 500)
main5 = saveWavSignal "example1_5.wav" $ Mono $ effect $ signalMono $ openWavSignal "input.wav"
where
effect inp = let buf = replicate 800 0.0 ++ outp
outp = zipWith3 (\x x' i -> x*0.5 + x'*0.4 + i*0.3) buf (tail buf)
(inp ++ replicate 10000 0.0)
in outp
Songs made with this Libraryexample2.mp3 Ressources
External LinksThis work would not have been possible without inspiration from the following:
|