module Csound.Typed.Opcode.MixerOpcodes (
    
    
    
    mixerClear, mixerGetLevel, mixerReceive, mixerSend, mixerSetLevel, mixerSetLevel_i) where

import Control.Monad.Trans.Class
import Control.Monad
import Csound.Dynamic
import Csound.Typed

-- 

-- | 
-- Resets all channels of a buss to 0.
--
-- >  MixerClear 
--
-- csound doc: <https://csound.com/docs/manual/MixerClear.html>
mixerClear ::   SE ()
mixerClear :: SE ()
mixerClear  =
  Dep () -> SE ()
forall a. Dep a -> SE a
SE (Dep () -> SE ()) -> Dep () -> SE ()
forall a b. (a -> b) -> a -> b
$ DepT GE (Dep ()) -> Dep ()
forall (m :: * -> *) a. Monad m => m (m a) -> m a
join (DepT GE (Dep ()) -> Dep ()) -> DepT GE (Dep ()) -> Dep ()
forall a b. (a -> b) -> a -> b
$ Dep () -> DepT GE (Dep ())
forall a. a -> DepT GE a
forall (m :: * -> *) a. Monad m => a -> m a
return (Dep () -> DepT GE (Dep ())) -> Dep () -> DepT GE (Dep ())
forall a b. (a -> b) -> a -> b
$ Dep ()
f 
  where
    f :: Dep ()
f  = Name -> Spec1 -> [E] -> Dep ()
forall (m :: * -> *). Monad m => Name -> Spec1 -> [E] -> DepT m ()
opcsDep_ Name
"MixerClear" [(Rate
Xr,[])] []

-- | 
-- Gets the level of a send to a buss.
--
-- Gets the level at which signals from the send are being added to the buss. The actual sending of the signal to the buss 
-- is performed by the MixerSend opcode.
--
-- > kgain  MixerGetLevel  isend, ibuss
--
-- csound doc: <https://csound.com/docs/manual/MixerGetLevel.html>
mixerGetLevel ::  D -> D -> SE Sig
mixerGetLevel :: D -> D -> SE Sig
mixerGetLevel D
b1 D
b2 =
  (E -> Sig) -> SE E -> SE Sig
forall a b. (a -> b) -> SE a -> SE b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap ( GE E -> Sig
Sig (GE E -> Sig) -> (E -> GE E) -> E -> Sig
forall b c a. (b -> c) -> (a -> b) -> a -> c
. E -> GE E
forall a. a -> GE a
forall (m :: * -> *) a. Monad m => a -> m a
return) (SE E -> SE Sig) -> SE E -> SE Sig
forall a b. (a -> b) -> a -> b
$ Dep E -> SE E
forall a. Dep a -> SE a
SE (Dep E -> SE E) -> Dep E -> SE E
forall a b. (a -> b) -> a -> b
$ DepT GE (Dep E) -> Dep E
forall (m :: * -> *) a. Monad m => m (m a) -> m a
join (DepT GE (Dep E) -> Dep E) -> DepT GE (Dep E) -> Dep E
forall a b. (a -> b) -> a -> b
$ E -> E -> Dep E
forall {m :: * -> *}. Monad m => E -> E -> DepT m E
f (E -> E -> Dep E) -> Dep E -> DepT GE (E -> Dep E)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (GE E -> Dep E
forall (m :: * -> *) a. Monad m => m a -> DepT m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (GE E -> Dep E) -> (D -> GE E) -> D -> Dep E
forall b c a. (b -> c) -> (a -> b) -> a -> c
. D -> GE E
unD) D
b1 DepT GE (E -> Dep E) -> Dep E -> DepT GE (Dep E)
forall a b. DepT GE (a -> b) -> DepT GE a -> DepT GE b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (GE E -> Dep E
forall (m :: * -> *) a. Monad m => m a -> DepT m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (GE E -> Dep E) -> (D -> GE E) -> D -> Dep E
forall b c a. (b -> c) -> (a -> b) -> a -> c
. D -> GE E
unD) D
b2
  where
    f :: E -> E -> DepT m E
f E
a1 E
a2 = Name -> Spec1 -> [E] -> DepT m E
forall (m :: * -> *). Monad m => Name -> Spec1 -> [E] -> DepT m E
opcsDep Name
"MixerGetLevel" [(Rate
Kr,[Rate
Ir,Rate
Ir])] [E
a1,E
a2]

-- | 
-- Receives an arate signal from a channel of a buss.
--
-- Receives an arate signal that has been mixed onto a channel of a buss.
--
-- > asignal  MixerReceive  ibuss, ichannel
--
-- csound doc: <https://csound.com/docs/manual/MixerReceive.html>
mixerReceive ::  D -> D -> SE Sig
mixerReceive :: D -> D -> SE Sig
mixerReceive D
b1 D
b2 =
  (E -> Sig) -> SE E -> SE Sig
forall a b. (a -> b) -> SE a -> SE b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap ( GE E -> Sig
Sig (GE E -> Sig) -> (E -> GE E) -> E -> Sig
forall b c a. (b -> c) -> (a -> b) -> a -> c
. E -> GE E
forall a. a -> GE a
forall (m :: * -> *) a. Monad m => a -> m a
return) (SE E -> SE Sig) -> SE E -> SE Sig
forall a b. (a -> b) -> a -> b
$ Dep E -> SE E
forall a. Dep a -> SE a
SE (Dep E -> SE E) -> Dep E -> SE E
forall a b. (a -> b) -> a -> b
$ DepT GE (Dep E) -> Dep E
forall (m :: * -> *) a. Monad m => m (m a) -> m a
join (DepT GE (Dep E) -> Dep E) -> DepT GE (Dep E) -> Dep E
forall a b. (a -> b) -> a -> b
$ E -> E -> Dep E
forall {m :: * -> *}. Monad m => E -> E -> DepT m E
f (E -> E -> Dep E) -> Dep E -> DepT GE (E -> Dep E)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (GE E -> Dep E
forall (m :: * -> *) a. Monad m => m a -> DepT m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (GE E -> Dep E) -> (D -> GE E) -> D -> Dep E
forall b c a. (b -> c) -> (a -> b) -> a -> c
. D -> GE E
unD) D
b1 DepT GE (E -> Dep E) -> Dep E -> DepT GE (Dep E)
forall a b. DepT GE (a -> b) -> DepT GE a -> DepT GE b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (GE E -> Dep E
forall (m :: * -> *) a. Monad m => m a -> DepT m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (GE E -> Dep E) -> (D -> GE E) -> D -> Dep E
forall b c a. (b -> c) -> (a -> b) -> a -> c
. D -> GE E
unD) D
b2
  where
    f :: E -> E -> DepT m E
f E
a1 E
a2 = Name -> Spec1 -> [E] -> DepT m E
forall (m :: * -> *). Monad m => Name -> Spec1 -> [E] -> DepT m E
opcsDep Name
"MixerReceive" [(Rate
Ar,[Rate
Ir,Rate
Ir])] [E
a1,E
a2]

-- | 
-- Mixes an arate signal into a channel of a buss.
--
-- >  MixerSend  asignal, isend, ibuss, ichannel
--
-- csound doc: <https://csound.com/docs/manual/MixerSend.html>
mixerSend ::  Sig -> D -> D -> D -> SE ()
mixerSend :: Sig -> D -> D -> D -> SE ()
mixerSend Sig
b1 D
b2 D
b3 D
b4 =
  Dep () -> SE ()
forall a. Dep a -> SE a
SE (Dep () -> SE ()) -> Dep () -> SE ()
forall a b. (a -> b) -> a -> b
$ DepT GE (Dep ()) -> Dep ()
forall (m :: * -> *) a. Monad m => m (m a) -> m a
join (DepT GE (Dep ()) -> Dep ()) -> DepT GE (Dep ()) -> Dep ()
forall a b. (a -> b) -> a -> b
$ E -> E -> E -> E -> Dep ()
forall {m :: * -> *}. Monad m => E -> E -> E -> E -> DepT m ()
f (E -> E -> E -> E -> Dep ())
-> Dep E -> DepT GE (E -> E -> E -> Dep ())
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (GE E -> Dep E
forall (m :: * -> *) a. Monad m => m a -> DepT m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (GE E -> Dep E) -> (Sig -> GE E) -> Sig -> Dep E
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Sig -> GE E
unSig) Sig
b1 DepT GE (E -> E -> E -> Dep ())
-> Dep E -> DepT GE (E -> E -> Dep ())
forall a b. DepT GE (a -> b) -> DepT GE a -> DepT GE b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (GE E -> Dep E
forall (m :: * -> *) a. Monad m => m a -> DepT m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (GE E -> Dep E) -> (D -> GE E) -> D -> Dep E
forall b c a. (b -> c) -> (a -> b) -> a -> c
. D -> GE E
unD) D
b2 DepT GE (E -> E -> Dep ()) -> Dep E -> DepT GE (E -> Dep ())
forall a b. DepT GE (a -> b) -> DepT GE a -> DepT GE b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (GE E -> Dep E
forall (m :: * -> *) a. Monad m => m a -> DepT m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (GE E -> Dep E) -> (D -> GE E) -> D -> Dep E
forall b c a. (b -> c) -> (a -> b) -> a -> c
. D -> GE E
unD) D
b3 DepT GE (E -> Dep ()) -> Dep E -> DepT GE (Dep ())
forall a b. DepT GE (a -> b) -> DepT GE a -> DepT GE b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (GE E -> Dep E
forall (m :: * -> *) a. Monad m => m a -> DepT m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (GE E -> Dep E) -> (D -> GE E) -> D -> Dep E
forall b c a. (b -> c) -> (a -> b) -> a -> c
. D -> GE E
unD) D
b4
  where
    f :: E -> E -> E -> E -> DepT m ()
f E
a1 E
a2 E
a3 E
a4 = Name -> Spec1 -> [E] -> DepT m ()
forall (m :: * -> *). Monad m => Name -> Spec1 -> [E] -> DepT m ()
opcsDep_ Name
"MixerSend" [(Rate
Xr,[Rate
Ar,Rate
Ir,Rate
Ir,Rate
Ir])] [E
a1,E
a2,E
a3,E
a4]

-- | 
-- Sets the level of a send to a buss.
--
-- Sets the level at which signals from the send are added to the buss. The actual sending of the signal to the buss 
-- is performed by the MixerSend opcode.
--
-- >  MixerSetLevel  isend, ibuss, kgain
--
-- csound doc: <https://csound.com/docs/manual/MixerSetLevel.html>
mixerSetLevel ::  D -> D -> Sig -> SE ()
mixerSetLevel :: D -> D -> Sig -> SE ()
mixerSetLevel D
b1 D
b2 Sig
b3 =
  Dep () -> SE ()
forall a. Dep a -> SE a
SE (Dep () -> SE ()) -> Dep () -> SE ()
forall a b. (a -> b) -> a -> b
$ DepT GE (Dep ()) -> Dep ()
forall (m :: * -> *) a. Monad m => m (m a) -> m a
join (DepT GE (Dep ()) -> Dep ()) -> DepT GE (Dep ()) -> Dep ()
forall a b. (a -> b) -> a -> b
$ E -> E -> E -> Dep ()
forall {m :: * -> *}. Monad m => E -> E -> E -> DepT m ()
f (E -> E -> E -> Dep ()) -> Dep E -> DepT GE (E -> E -> Dep ())
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (GE E -> Dep E
forall (m :: * -> *) a. Monad m => m a -> DepT m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (GE E -> Dep E) -> (D -> GE E) -> D -> Dep E
forall b c a. (b -> c) -> (a -> b) -> a -> c
. D -> GE E
unD) D
b1 DepT GE (E -> E -> Dep ()) -> Dep E -> DepT GE (E -> Dep ())
forall a b. DepT GE (a -> b) -> DepT GE a -> DepT GE b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (GE E -> Dep E
forall (m :: * -> *) a. Monad m => m a -> DepT m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (GE E -> Dep E) -> (D -> GE E) -> D -> Dep E
forall b c a. (b -> c) -> (a -> b) -> a -> c
. D -> GE E
unD) D
b2 DepT GE (E -> Dep ()) -> Dep E -> DepT GE (Dep ())
forall a b. DepT GE (a -> b) -> DepT GE a -> DepT GE b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (GE E -> Dep E
forall (m :: * -> *) a. Monad m => m a -> DepT m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (GE E -> Dep E) -> (Sig -> GE E) -> Sig -> Dep E
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Sig -> GE E
unSig) Sig
b3
  where
    f :: E -> E -> E -> DepT m ()
f E
a1 E
a2 E
a3 = Name -> Spec1 -> [E] -> DepT m ()
forall (m :: * -> *). Monad m => Name -> Spec1 -> [E] -> DepT m ()
opcsDep_ Name
"MixerSetLevel" [(Rate
Xr,[Rate
Ir,Rate
Ir,Rate
Kr])] [E
a1,E
a2,E
a3]

-- | 
-- Sets the level of a send to a buss.
--
-- Sets the level at which signals from the send are added to the buss. This opcode, because all parameters are irate, may 
--       be used in the orchestra header. The actual sending of the signal to the buss 
--       is performed by the MixerSend opcode.
--
-- >  MixerSetLevel_i  isend, ibuss, igain
--
-- csound doc: <https://csound.com/docs/manual/MixerSetLevel_i.html>
mixerSetLevel_i ::  D -> D -> D -> SE ()
mixerSetLevel_i :: D -> D -> D -> SE ()
mixerSetLevel_i D
b1 D
b2 D
b3 =
  Dep () -> SE ()
forall a. Dep a -> SE a
SE (Dep () -> SE ()) -> Dep () -> SE ()
forall a b. (a -> b) -> a -> b
$ DepT GE (Dep ()) -> Dep ()
forall (m :: * -> *) a. Monad m => m (m a) -> m a
join (DepT GE (Dep ()) -> Dep ()) -> DepT GE (Dep ()) -> Dep ()
forall a b. (a -> b) -> a -> b
$ E -> E -> E -> Dep ()
forall {m :: * -> *}. Monad m => E -> E -> E -> DepT m ()
f (E -> E -> E -> Dep ()) -> Dep E -> DepT GE (E -> E -> Dep ())
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (GE E -> Dep E
forall (m :: * -> *) a. Monad m => m a -> DepT m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (GE E -> Dep E) -> (D -> GE E) -> D -> Dep E
forall b c a. (b -> c) -> (a -> b) -> a -> c
. D -> GE E
unD) D
b1 DepT GE (E -> E -> Dep ()) -> Dep E -> DepT GE (E -> Dep ())
forall a b. DepT GE (a -> b) -> DepT GE a -> DepT GE b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (GE E -> Dep E
forall (m :: * -> *) a. Monad m => m a -> DepT m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (GE E -> Dep E) -> (D -> GE E) -> D -> Dep E
forall b c a. (b -> c) -> (a -> b) -> a -> c
. D -> GE E
unD) D
b2 DepT GE (E -> Dep ()) -> Dep E -> DepT GE (Dep ())
forall a b. DepT GE (a -> b) -> DepT GE a -> DepT GE b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (GE E -> Dep E
forall (m :: * -> *) a. Monad m => m a -> DepT m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (GE E -> Dep E) -> (D -> GE E) -> D -> Dep E
forall b c a. (b -> c) -> (a -> b) -> a -> c
. D -> GE E
unD) D
b3
  where
    f :: E -> E -> E -> DepT m ()
f E
a1 E
a2 E
a3 = Name -> Spec1 -> [E] -> DepT m ()
forall (m :: * -> *). Monad m => Name -> Spec1 -> [E] -> DepT m ()
opcsDep_ Name
"MixerSetLevel_i" [(Rate
Xr,[Rate
Ir,Rate
Ir,Rate
Ir])] [E
a1,E
a2,E
a3]