module Sound.SC3.UGen.Enum where
import Sound.SC3.Common
import qualified Sound.SC3.UGen.Envelope.Interpolate as I
import Sound.SC3.UGen.Type
data Loop = Loop
| NoLoop
| WithLoop UGen
deriving (Eq, Show)
from_loop :: Loop -> UGen
from_loop e =
case e of
NoLoop -> 0
Loop -> 1
WithLoop u -> u
data Interpolation = NoInterpolation
| LinearInterpolation
| CubicInterpolation
| Interpolation UGen
deriving (Eq, Show)
from_interpolation :: Interpolation -> UGen
from_interpolation e =
case e of
NoInterpolation -> 1
LinearInterpolation -> 2
CubicInterpolation -> 4
Interpolation u -> u
data DoneAction = DoNothing
| PauseSynth
| RemoveSynth
| RemoveGroup
| DoneAction UGen
deriving (Eq, Show)
from_done_action :: DoneAction -> UGen
from_done_action e =
case e of
DoNothing -> 0
PauseSynth -> 1
RemoveSynth -> 2
RemoveGroup -> 14
DoneAction u -> u
data Warp = Linear
| Exponential
| Warp UGen
deriving (Eq, Show)
from_warp :: Warp -> UGen
from_warp e =
case e of
Linear -> 0
Exponential -> 1
Warp u -> u
data Envelope_Curve a = EnvStep
| EnvLin
| EnvExp
| EnvSin
| EnvWelch
| EnvNum a
| EnvSqr
| EnvCub
| EnvHold
deriving (Eq, Show)
type Envelope_Curve2 a = T2 (Envelope_Curve a)
type Envelope_Curve3 a = T3 (Envelope_Curve a)
type Envelope_Curve4 a = T4 (Envelope_Curve a)
type EnvCurve = Envelope_Curve UGen
env_curve_shape :: Num a => Envelope_Curve a -> a
env_curve_shape e =
case e of
EnvStep -> 0
EnvLin -> 1
EnvExp -> 2
EnvSin -> 3
EnvWelch -> 4
EnvNum _ -> 5
EnvSqr -> 6
EnvCub -> 7
EnvHold -> 8
env_curve_value :: Num a => Envelope_Curve a -> a
env_curve_value e =
case e of
EnvNum u -> u
_ -> 0
env_curve_interpolation_f :: (Ord t, Floating t) =>
Envelope_Curve t -> I.Interpolation_F t
env_curve_interpolation_f c =
case c of
EnvStep -> I.step
EnvLin -> I.linear
EnvExp -> I.exponential
EnvSin -> I.sine
EnvWelch -> I.welch
EnvNum n -> I.curve n
EnvSqr -> I.squared
EnvCub -> I.cubed
EnvHold -> undefined
data Buffer = Buffer_Id Int
| Buffer UGen
deriving (Eq, Show)
from_buffer :: Buffer -> UGen
from_buffer b =
case b of
Buffer_Id i -> constant i
Buffer u -> u