packages feed

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
  }