zwirn-0.2.2.0: src/zwirn-lang/Zwirn/Stream/Types.hs
{-# LANGUAGE DeriveGeneric #-}
module Zwirn.Stream.Types where
import Control.Concurrent.MVar (MVar)
import qualified Data.Map as Map
import Data.Text (Text)
import GHC.Generics (Generic)
import qualified Sound.Osc.Transport.Fd.Udp as O
import Sound.Tidal.Clock
import Zwirn.Language.Evaluate.Expression
import Zwirn.Stream.Target
data PlayState
= Normal
| Solo
| Mute
deriving (Eq, Show)
data Identifier
= TextID Text
| NumID Int
deriving (Eq, Show, Ord)
type PlayMap =
Map.Map Identifier (Targeted (PlayState, Zwirn Expression, Maybe (Zwirn (Zwirn Expression -> Zwirn Expression))))
type ActionMap = Map.Map Identifier (Zwirn Expression)
type BusMap = Map.Map Int (Targeted (Zwirn Expression))
data StreamConfig = StreamConfig
{ streamConfigTargets :: [TargetConfig],
streamConfigDefaultTarget :: Text,
streamConfigLocalPort :: Int,
streamConfigPrecision :: Rational,
streamConfigClock :: ClockConfig
}
deriving (Generic)
data Stream = Stream
{ sPlayMap :: MVar PlayMap,
sActionMap :: MVar ActionMap,
sBusMap :: MVar BusMap,
sState :: MVar ExpressionMap,
sBusses :: MVar [Int],
sTargetMap :: TargetMap,
sDefaultTarget :: Text,
sLocal :: O.Udp,
sClockRef :: ClockRef,
sConfig :: StreamConfig
}