{-# LANGUAGE
DataKinds
, ExtendedDefaultRules
, LambdaCase
, OverloadedStrings
, NoIncoherentInstances
, NoMonomorphismRestriction
, NoUndecidableInstances
#-}
module Vivid.UGens.InOut (
diskOut
, aIn
, kIn
, localIn
, localOut
, out
, out'
, aOut
, replaceOut
, soundIn
) where
import Vivid.SC.SynthDef.Types (CalculationRate(..))
import Vivid.SC.Server.Types (BufferId(..))
import Vivid.SynthDef
import Vivid.SynthDef.FromUA
import Vivid.UGens.Algebraic
import Vivid.UGens.Args
import Data.Proxy
aIn :: Args '["bus"] '[] a => a -> SDBody a Signal
aIn = makeUGen
"In" AR
(Vs::Vs '["bus"])
NoDefaults
diskOut :: ToSig s a => BufferId -> [s] -> SDBody' a [Signal]
diskOut (BufferId bufId) sigs = do
sigs' <- mapM toSig sigs
addPolyUGen $ UGen (UGName_S "DiskOut") AR (Constant (realToFrac bufId) : sigs') 0
kIn :: Args '["bus"] '[] a => a -> SDBody a Signal
kIn = makeUGen
"In" KR
(Vs::Vs '["bus"])
NoDefaults
localIn :: Int -> SDBody' a [Signal]
localIn numChans = do
addPolyUGen $ UGen (UGName_S "LocalIn") AR [Constant 0] numChans
localOut :: ToSig s as => [s] -> SDBody' as ()
localOut inSig = do
sigs <- mapM toSig inSig
addPolyUGen (UGen (UGName_S "LocalOut") AR sigs 0) >>= \case
[] -> pure ()
_ -> error "??? (23s0g)"
pure ()
out :: (ToSig i a, ToSig busNum a) => busNum -> [i] -> SDBody' a [Signal]
out = aOut
out' :: (Elem "out" a, ToSig i a) => [i] -> SDBody' a [Signal]
out' = out (V::V "out")
aOut :: (ToSig i a, ToSig busNum a) => busNum -> [i] -> SDBody' a [Signal]
aOut busNum is = do
busNum' <- toSig busNum
is' <- mapM toSig is
addPolyUGen $ UGen (UGName_S "Out") AR (busNum' : is') ((length::[a]->Int) is)
replaceOut :: (ToSig i a, ToSig busNum a) => busNum -> [i] -> SDBody' a [Signal]
replaceOut busNum is = do
busNum' <- toSig busNum
is' <- mapM toSig is
addPolyUGen $ UGen (UGName_S "ReplaceOut") AR (busNum' : is') ((length::[a]->Int) is)
soundIn :: Args '["bus"] '[] a => a -> SDBody a Signal
soundIn args = do
bus <- args `uaArgVal` (Proxy::Proxy "bus")
nob <- addUGen $ UGen (UGName_S "NumOutputBuses") IR [] 1
inPos <- nob ~+ (bus :: Signal)
addUGen $ UGen (UGName_S "In") AR [inPos] 1