module Csound.Typed.Control ( -- * SE module Csound.Typed.GlobalState.SE, -- ** SE reference module Csound.Typed.Control.Ref, -- * Global settings instr0, getIns, setDur, -- * Misc freshId, -- * Score module Csound.Typed.Control.Mix, -- * Midi module Csound.Typed.Control.Midi, -- * Named instruments (API) module Csound.Typed.Control.Api, -- * OSC module Csound.Typed.Control.Osc, -- * Channel module Csound.Typed.Control.Channel, -- * Sf2 module Csound.Typed.Control.Sf2, -- * Events module Csound.Typed.Control.Evt, -- * Band-limited oscillators module Csound.Typed.Control.Vco, -- * Imperative instruments module Csound.Typed.Control.InstrRef, -- * Array folding and traversals module Csound.Typed.Control.ArrayTraverse, -- * Reads global config arguments from command line module Csound.Typed.Control.MacrosArgs ) where import Csound.Typed.GlobalState.SE import Csound.Typed.Control.Ref import Csound.Typed.Control.Evt import Csound.Typed.Control.Mix import Csound.Typed.Control.Midi import Csound.Typed.Control.Api import Csound.Typed.Control.Osc import Csound.Typed.Control.Channel import Csound.Typed.Control.Sf2 import Csound.Typed.Control.Vco import Csound.Typed.Control.InstrRef import Csound.Typed.Control.ArrayTraverse import Csound.Typed.Control.MacrosArgs import Csound.Typed.Types import Csound.Typed.GlobalState instr0 :: Tuple a => SE a -> SE a instr0 a = return $ toTuple $ saveIns0 ins0Arity (tupleRates $ proxy a) ins0Exp where ins0Exp = execGEinSE $ fmap fromTuple a ins0Arity = tupleArity $ proxy a proxy :: Tuple a => SE a -> a proxy = const (toTuple $ return $ repeat undefined) getIns :: Sigs a => SE a getIns = res where res = fmap toTuple $ fromDep $ getIn (tupleArity $ proxy res) proxy :: SE a -> a proxy = const undefined -- | Sets the global duration of the file or output signal to the given value. -- It should be used only once! The proper place is in the top-most -- expression before sending to @dac@ or @writeWav@. setDur :: Sigs a => D -> a -> a setDur mdt as = toTuple $ do dt <- toGE mdt vals <- fromTuple as setDurationForce dt return vals -- | Gets new id. freshId :: SE D freshId = SE $ fmap fromE freeChn