-- | An instrument abstraction and a /default/ instrument for patterns. module Sound.SC3.Lang.Control.Instrument where import Data.Default {- data-default -} import Sound.SC3.ID {- hsc3 -} -- | An 'Instr' is either a 'Synthdef' or the 'String' naming a -- 'Synthdef'. data Instr = Instr_Def {i_def :: Synthdef,i_send_release :: Bool} | Instr_Ref {i_ref :: String,i_send_release :: Bool} deriving (Eq,Show) -- | All 'Instr' have a name. i_name :: Instr -> String i_name i = case i of Instr_Def s _ -> synthdefName s Instr_Ref nm _ -> nm -- | All 'Instr' may have a 'Synthdef'. i_synthdef :: Instr -> Maybe Synthdef i_synthdef i = case i of Instr_Def s _ -> Just s Instr_Ref _ _ -> Nothing -- | If 'I_Def' subsequent are 'I_Ref', else all 'I_Ref'. 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 -- | 'Instr' of 'defaultSynthdef', ie. 'def' of 'Synthdef'. defaultInstr :: Instr defaultInstr = Instr_Def def True {- withSC3 (send (d_recv defaultSynthdef)) -}