module Sound.SC3.Server.Synthdef.Type where
import qualified Data.ByteString.Lazy as B
import Sound.SC3.UGen.Rate
import Sound.SC3.UGen.Type
type NodeId = Int
type PortIndex = Int
data Graph = Graph {nextId :: NodeId
,constants :: [Node]
,controls :: [Node]
,ugens :: [Node]}
deriving (Eq,Show)
type Graphdef = B.ByteString
data KType = K_IR | K_KR | K_TR | K_AR
deriving (Eq,Show,Ord)
data FromPort = FromPort_C {port_nid :: NodeId}
| FromPort_K {port_nid :: NodeId,port_kt :: KType}
| FromPort_U {port_nid :: NodeId,port_idx :: Maybe PortIndex}
deriving (Eq,Show)
data ToPort = ToPort NodeId PortIndex deriving (Eq,Show)
type Edge = (FromPort,ToPort)
data Node = NodeC {node_id :: NodeId
,node_c_value :: Double}
| NodeK {node_id :: NodeId
,node_k_rate :: Rate
,node_k_name :: String
,node_k_default :: Double
,node_k_type :: KType}
| NodeU {node_id :: NodeId
,node_u_rate :: Rate
,node_u_name :: String
,node_u_inputs :: [FromPort]
,node_u_outputs :: [Output]
,node_u_special :: Special
,node_u_ugenid :: UGenId}
| NodeP {node_id :: NodeId
,node_p_node :: Node
,node_p_index :: PortIndex}
deriving (Eq,Show)
data Synthdef = Synthdef {synthdefName :: String
,synthdefGraph :: Graph}
deriving (Eq,Show)