packages feed

zwirn-0.2.3.1: src/zwirn-doux/Zwirn/Doux/Types.hs

{-# LANGUAGE DeriveGeneric #-}

module Zwirn.Doux.Types where

import Control.Concurrent.MVar
import GHC.Generics (Generic)
import Sound.Doux.Engine
import Sound.Tidal.Clock
import Zwirn.Language.Evaluate (ExpressionMap)
import Zwirn.Language.Play

data StreamConfig = StreamConfig
  { streamConfigPrecision :: Rational,
    streamConfigSamples :: Maybe FilePath,
    streamConfigInput :: Maybe String,
    streamConfigOutput :: Maybe String,
    streamConfigHost :: Maybe String,
    streamConfigBufferSize :: Int,
    streamConfigChannels :: Int,
    streamConfigBlockSize :: Int,
    streamConfigMaxVoices :: Int,
    streamConfigClock :: ClockConfig
  }
  deriving (Generic)

data Stream = Stream
  { sDoux :: Doux,
    sPlayMap :: MVar PlayMap,
    sActionMap :: MVar ActionMap,
    sBusMap :: MVar BusMap,
    sState :: MVar ExpressionMap,
    sClockRef :: ClockRef,
    sConfig :: StreamConfig
  }

defaultDouxClockConfig :: ClockConfig
defaultDouxClockConfig =
  ClockConfig
    { clockFrameTimespan = 1 / 20,
      clockEnableLink = False,
      clockProcessAhead = 1 / 10,
      clockSkipTicks = 10,
      clockQuantum = 4,
      clockBeatsPerCycle = 4
    }