AlgoRhythm-0.1.0.0: src/Grammar/Integration.hs
{-# LANGUAGE ImplicitParams #-}
module Grammar.Integration
( integrate
) where
import Control.Monad (when)
import Dynamics
import Grammar.Harmony
import Grammar.Melody
import Grammar.TonalHarmony
import Grammar.Types
import Grammar.VoiceLeading
import Music
integrate :: (?melodyConfig :: MelodyConfig, ?harmonyConfig :: HarmonyConfig)
=> Duration -> IO (MusicCore, MusicCore)
integrate t = do
when (t < 4 * wn) $
fail "integrate: requested duration should be at least 4 bars of music"
harmonicStructure <- runGrammar tonalHarmony t ?harmonyConfig
melodicStructure <- runGrammar melody t ()
background <- voiceLead harmonicStructure
foreground <- mkSolo harmonicStructure melodicStructure
return (dyn $ toMusicCore background, dyn $ toMusicCore foreground)