module Sound.SC3.Lang.Control.Instrument where
import Data.Default
import Sound.SC3.ID
data Instr = Instr_Def {i_def :: Synthdef,i_send_release :: Bool}
| Instr_Ref {i_ref :: String,i_send_release :: Bool}
deriving (Eq,Show)
i_name :: Instr -> String
i_name i =
case i of
Instr_Def s _ -> synthdefName s
Instr_Ref nm _ -> nm
i_synthdef :: Instr -> Maybe Synthdef
i_synthdef i =
case i of
Instr_Def s _ -> Just s
Instr_Ref _ _ -> Nothing
i_repeat :: Instr -> [Instr]
i_repeat i =
case i of
Instr_Def d sr -> i : repeat (Instr_Ref (synthdefName d) sr)
Instr_Ref _ _ -> repeat i
defaultInstr :: Instr
defaultInstr = Instr_Def def True