import Call import Call.Util.Deck as Deck import Control.Monad.State.Strict import Control.Lens main = runSystemDefault $ do music <- prepareMusic "assets/Monoidal Purity.wav" playMusic music stand type Music s = Instance (StateT Deck (System s)) (System s) prepareMusic :: FilePath -> System s (Music s) prepareMusic path = do wav <- readWAVE path i <- new $ variable $ source .~ sampleSource wav $ Deck.empty linkAudio $ \dt n -> i .- playback dt n return i playMusic :: Music s -> System s () playMusic m = m .- playing .= True