{-# LANGUAGE NoImplicitPrelude #-}
{-# LANGUAGE Rank2Types #-}
{- |
This module contains some instruments with Causal arrow interface.
The interface is a bit low-level
since you have to write the transformations of the Haskell-side
separately from the computations on the LLVM side.
A nicer integration is used in
"Synthesizer.LLVM.Server.CausalPacked.InstrumentPlug".
However, we preserve this module in order to show
how things work internally.
-}
module Synthesizer.LLVM.Server.CausalPacked.Instrument (
   ping,
   pingRelease,
   helixSound,
   pingStereoReleaseFM,
   filterSawStereoFM,
   tineStereoFM,
   bellNoiseStereoFM,
   wind,
   windPhaser,
   softStringShapeFM, cosineStringStereoFM,
   arcSawStringStereoFM, arcSineStringStereoFM,
   arcSquareStringStereoFM, arcTriangleStringStereoFM,
   fmStringStereoFM,
   sampledSound, sampledSoundMono,
   Control, DetuneBendModControl, WithEnvelopeControl, StereoChunk,
   Frequency, Time,
   pingControlledEnvelope, stringControlledEnvelope,
   reorderEnvelopeControl,
   frequencyControl, zipEnvelope,
   ) where

import Synthesizer.LLVM.Server.Packed.Instrument (stereoNoise)
import Synthesizer.LLVM.Server.CausalPacked.Common (transposeModulation)
import Synthesizer.LLVM.Server.CommonPacked
import Synthesizer.LLVM.Server.Common hiding
         (Instrument, Frequency, Time, Control, transposeModulation)
import Synthesizer.LLVM.Server.Common (Arg(Frequency, Time))

import qualified Synthesizer.LLVM.Server.SampledSound as Sample
import qualified Synthesizer.LLVM.Storable.Process as PSt
import qualified Synthesizer.MIDI.CausalIO.Process as MIO
import qualified Synthesizer.CausalIO.Gate as Gate
import qualified Synthesizer.CausalIO.Process as PIO

import qualified Synthesizer.LLVM.Filter.Universal as UniFilter
import qualified Synthesizer.LLVM.Filter.Allpass as Allpass
import qualified Synthesizer.LLVM.Filter.Moog as Moog
import qualified Synthesizer.LLVM.Causal.Exponential2 as Exp
import qualified Synthesizer.LLVM.Frame.Stereo as Stereo
import qualified Synthesizer.LLVM.Frame as Frame
import qualified Synthesizer.LLVM.Frame.SerialVector as Serial
import qualified Synthesizer.LLVM.Causal.Helix as Helix
import qualified Synthesizer.LLVM.Causal.Functional as F
import qualified Synthesizer.LLVM.Causal.ControlledPacked as CtrlPS
import qualified Synthesizer.LLVM.Causal.Render as CausalRender
import qualified Synthesizer.LLVM.Causal.ProcessPacked as CausalPS
import qualified Synthesizer.LLVM.Causal.Process as Causal
import qualified Synthesizer.LLVM.Generator.SignalPacked as SigPS
import qualified Synthesizer.LLVM.Generator.Render as Render
import qualified Synthesizer.LLVM.Generator.Signal as Sig
import qualified Synthesizer.LLVM.Interpolation as Interpolation
import qualified Synthesizer.LLVM.Wave as WaveL
import Synthesizer.LLVM.Causal.Functional (($&), (&|&))
import Synthesizer.LLVM.Causal.Process (($<), ($>), ($<#))

import qualified Synthesizer.LLVM.MIDI.BendModulation as BM
import qualified Synthesizer.LLVM.MIDI as MIDIL
import qualified Synthesizer.PiecewiseConstant.Signal as PC
import qualified Synthesizer.Causal.Class as CausalClass
import qualified Synthesizer.Generic.Cut as CutG
import qualified Synthesizer.Zip as Zip
import qualified Data.EventList.Relative.BodyTime as EventListBT

import qualified Synthesizer.Storable.Signal as SigSt
import qualified Data.StorableVector.Lazy as SVL
import qualified Data.StorableVector as SV

import qualified LLVM.DSL.Expression as Expr
import LLVM.DSL.Expression (Exp, (<=*), (>*))

import qualified LLVM.Extra.Multi.Value as MultiValue
import qualified LLVM.Extra.Tuple as Tuple
import qualified LLVM.Core as LLVM

import qualified Type.Data.Num.Decimal as TypeNum

import qualified Control.Applicative.HT as App
import qualified Control.Monad.HT as M
import Control.Arrow (Arrow, arr, first, second, (&&&), (<<^), (^<<))
import Control.Category (id, (.))
import Control.Applicative (liftA2, liftA3, (<$>))
import Control.Functor.HT (unzip)

import qualified Data.Traversable as Trav
import Data.Semigroup ((<>))
import Data.Monoid (mappend)
import Data.Tuple.HT (mapPair)

import qualified Number.DimensionTerm as DN

import NumericPrelude.Numeric
import NumericPrelude.Base hiding (id, unzip, (.))


type Instrument a sig = SampleRate a -> MIO.Instrument a sig

type Control = EventListBT.T PC.ShortStrictTime

type Time = DN.Time Real
type Frequency = DN.Frequency Real

type Chunk = SV.Vector Vector
type StereoChunk = SV.Vector (Stereo.T Vector)
type BendModControl = Control (BM.T Real)
type DetuneBendModControl = Zip.T (Control Real) (Control (BM.T Real))

type PIOId a = PIO.T a a



frequencyFromBendModulationPacked ::
   Exp Real ->
   F.T inp (MultiValue.T (BM.T Real)) ->
   F.T inp VectorValue
frequencyFromBendModulationPacked :: forall inp.
Exp Real -> T inp (T (T Real)) -> T inp (T (T VectorSize Real))
frequencyFromBendModulationPacked Exp Real
speed T inp (T (T Real))
fm =
   Exp Real -> T (T (T Real)) (T (T VectorSize Real))
forall n a.
(Vector n a, PseudoRing a, IntegerConstant a, Fraction a) =>
Exp a -> T (T (T a)) (Value n a)
MIDIL.frequencyFromBendModulationPacked Exp Real
speed T (T (T Real)) (T (T VectorSize Real))
-> T inp (T (T Real)) -> T inp (T (T VectorSize Real))
forall b c a. T b c -> T a b -> T a c
$& (T (T Real) -> T (T Real)
forall a. T (T a) -> T (T a)
BM.unMultiValue (T (T Real) -> T (T Real))
-> T inp (T (T Real)) -> T inp (T (T Real))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> T inp (T (T Real))
fm)

stereoFrequenciesFromDetuneBendModulation ::
   Exp Real ->
   (F.T inp (MultiValue.T Real),
    F.T inp (MultiValue.T (BM.T Real))) ->
   F.T inp (Stereo.T VectorValue)
stereoFrequenciesFromDetuneBendModulation :: forall inp.
Exp Real
-> (T inp (T Real), T inp (T (T Real)))
-> T inp (T (T (T VectorSize Real)))
stereoFrequenciesFromDetuneBendModulation Exp Real
speed (T inp (T Real)
detune, T inp (T (T Real))
freq) =
   T (T (T VectorSize Real), T (T (T VectorSize Real)))
  (T (T (T VectorSize Real)))
forall a. PseudoRing a => T (a, T a) (T a)
Causal.envelopeStereo T (T (T VectorSize Real), T (T (T VectorSize Real)))
  (T (T (T VectorSize Real)))
-> T inp (T (T VectorSize Real), T (T (T VectorSize Real)))
-> T inp (T (T (T VectorSize Real)))
forall b c a. T b c -> T a b -> T a c
$&
      Exp Real -> T inp (T (T Real)) -> T inp (T (T VectorSize Real))
forall inp.
Exp Real -> T inp (T (T Real)) -> T inp (T (T VectorSize Real))
frequencyFromBendModulationPacked Exp Real
speed T inp (T (T Real))
freq
      T inp (T (T VectorSize Real))
-> T inp (T (T (T VectorSize Real)))
-> T inp (T (T VectorSize Real), T (T (T VectorSize Real)))
forall a b c. T a b -> T a c -> T a (b, c)
&|&
      ((T (Exp Real) -> T (Exp (T VectorSize Real)))
-> T (T (T Real)) (T (T (T VectorSize Real)))
forall ae a be b.
(Aggregate ae a, Aggregate be b) =>
(ae -> be) -> T a b
Causal.map ((Exp Real -> Exp (T VectorSize Real))
-> T (Exp Real) -> T (Exp (T VectorSize Real))
forall a b. (a -> b) -> T a -> T b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Exp Real -> Exp (T VectorSize Real)
forall n a. (Positive n, C a) => Exp a -> Exp (T n a)
Serial.upsample) T (T (T Real)) (T (T (T VectorSize Real)))
-> T inp (T (T Real)) -> T inp (T (T (T VectorSize Real)))
forall b c a. T b c -> T a b -> T a c
$&
       (T Real -> T Real -> T (T Real))
-> T inp (T Real) -> T inp (T Real) -> T inp (T (T Real))
forall a b c. (a -> b -> c) -> T inp a -> T inp b -> T inp c
forall (f :: * -> *) a b c.
Applicative f =>
(a -> b -> c) -> f a -> f b -> f c
liftA2 T Real -> T Real -> T (T Real)
forall a. a -> a -> T a
Stereo.cons (T inp (T Real)
forall a. C a => a
one T inp (T Real) -> T inp (T Real) -> T inp (T Real)
forall a. C a => a -> a -> a
+ T inp (T Real)
detune) (T inp (T Real)
forall a. C a => a
one T inp (T Real) -> T inp (T Real) -> T inp (T Real)
forall a. C a => a -> a -> a
- T inp (T Real)
detune))


frequencyFromSampleRate :: SampleRate a -> DN.Frequency a
frequencyFromSampleRate :: forall a. SampleRate a -> Frequency a
frequencyFromSampleRate (SampleRate a
sr) = a -> Frequency a
forall a. a -> Frequency a
DN.frequency a
sr

halfLifeControl ::
   (Functor f) =>
   SampleRate Real ->
   f Time ->
   f (Exp.ParameterPacked Vector)
halfLifeControl :: forall (f :: * -> *).
Functor f =>
SampleRate Real
-> f Time -> f (ParameterPacked (T VectorSize Real))
halfLifeControl SampleRate Real
sr =
   (Time -> ParameterPacked (T VectorSize Real))
-> f Time -> f (ParameterPacked (T VectorSize Real))
forall a b. (a -> b) -> f a -> f b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (Real -> ParameterPacked (T VectorSize Real)
forall n a. (Positive n, C a) => a -> ParameterPacked (T n a)
Exp.parameterPackedPlain (Real -> ParameterPacked (T VectorSize Real))
-> (Time -> Real) -> Time -> ParameterPacked (T VectorSize Real)
forall b c a. (b -> c) -> (a -> b) -> a -> c
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
.
         (Time -> Frequency -> Real) -> Frequency -> Time -> Real
forall a b c. (a -> b -> c) -> b -> a -> c
flip Time -> Frequency -> Real
forall u a. (C u, C a) => T u a -> T (Recip u) a -> a
DN.mulToScalar (SampleRate Real -> Frequency
forall a. SampleRate a -> Frequency a
frequencyFromSampleRate SampleRate Real
sr))

frequencyControl ::
   (Functor f) =>
   SampleRate Real ->
   f Frequency ->
   f Real
frequencyControl :: forall (f :: * -> *).
Functor f =>
SampleRate Real -> f Frequency -> f Real
frequencyControl SampleRate Real
sr =
   (Frequency -> Real) -> f Frequency -> f Real
forall a b. (a -> b) -> f a -> f b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap ((Frequency -> Frequency -> Real) -> Frequency -> Frequency -> Real
forall a b c. (a -> b -> c) -> b -> a -> c
flip Frequency -> Frequency -> Real
forall u a. (C u, C a) => T u a -> T u a -> a
DN.divToScalar (Frequency -> Frequency -> Real) -> Frequency -> Frequency -> Real
forall a b. (a -> b) -> a -> b
$ SampleRate Real -> Frequency
forall a. SampleRate a -> Frequency a
frequencyFromSampleRate SampleRate Real
sr)

takeThreshold :: Exp Real -> Causal.T VectorValue VectorValue
takeThreshold :: Exp Real -> T (T (T VectorSize Real)) (T (T VectorSize Real))
takeThreshold Exp Real
threshold =
   (Exp (T VectorSize Real) -> Exp Bool)
-> T (T (T VectorSize Real)) (T (T VectorSize Real))
forall ae a. Aggregate ae a => (ae -> Exp Bool) -> T a a
Causal.takeWhile (\Exp (T VectorSize Real)
y -> Exp Real
threshold Exp Real -> Exp Real -> Exp Bool
forall a. Comparison a => Exp a -> Exp a -> Exp Bool
<=* Exp (T VectorSize Real) -> Exp Real
forall n a. (Positive n, C a) => Exp (T n a) -> Exp a
Serial.subsample Exp (T VectorSize Real)
y)


type EnvelopeControl =
        Zip.T MIO.GateChunk
           (Zip.T (Control Time) (Control Time))

type WithEnvelopeControl remainder =
        Zip.T MIO.GateChunk
           (Zip.T
              (Zip.T (Control Time) (Control Time))
              remainder)

reorderEnvelopeControl ::
   (Arrow arrow, CutG.Read remainder) =>
   arrow
      (WithEnvelopeControl remainder)
      (Zip.T EnvelopeControl remainder)
reorderEnvelopeControl :: forall (arrow :: * -> * -> *) remainder.
(Arrow arrow, Read remainder) =>
arrow (WithEnvelopeControl remainder) (T EnvelopeControl remainder)
reorderEnvelopeControl =
   (WithEnvelopeControl remainder -> T EnvelopeControl remainder)
-> arrow
     (WithEnvelopeControl remainder) (T EnvelopeControl remainder)
forall b c. (b -> c) -> arrow b c
forall (a :: * -> * -> *) b c. Arrow a => (b -> c) -> a b c
arr ((WithEnvelopeControl remainder -> T EnvelopeControl remainder)
 -> arrow
      (WithEnvelopeControl remainder) (T EnvelopeControl remainder))
-> (WithEnvelopeControl remainder -> T EnvelopeControl remainder)
-> arrow
     (WithEnvelopeControl remainder) (T EnvelopeControl remainder)
forall a b. (a -> b) -> a -> b
$ \(Zip.Cons GateChunk
gate (Zip.Cons T (Control Time) (Control Time)
times remainder
ctrl)) ->
      String
-> EnvelopeControl -> remainder -> T EnvelopeControl remainder
forall a b. (Read a, Read b) => String -> a -> b -> T a b
Zip.consChecked String
"ping gate ctrl"
         (String
-> GateChunk -> T (Control Time) (Control Time) -> EnvelopeControl
forall a b. (Read a, Read b) => String -> a -> b -> T a b
Zip.consChecked String
"ping gate times" GateChunk
gate T (Control Time) (Control Time)
times) remainder
ctrl


zipEnvelope ::
   (Arrow arrow, CutG.Transform a, CutG.Transform b) =>
   arrow EnvelopeControl a ->
   arrow (WithEnvelopeControl b) (Zip.T a b)
zipEnvelope :: forall (arrow :: * -> * -> *) a b.
(Arrow arrow, Transform a, Transform b) =>
arrow EnvelopeControl a -> arrow (WithEnvelopeControl b) (T a b)
zipEnvelope arrow EnvelopeControl a
env =
   arrow EnvelopeControl a -> arrow (T EnvelopeControl b) (T a b)
forall (arrow :: * -> * -> *) b c a.
(Arrow arrow, Transform b, Transform c) =>
arrow a b -> arrow (T a c) (T b c)
Zip.arrowFirstShorten arrow EnvelopeControl a
env
   arrow (T EnvelopeControl b) (T a b)
-> arrow (WithEnvelopeControl b) (T EnvelopeControl b)
-> arrow (WithEnvelopeControl b) (T a b)
forall b c a. arrow b c -> arrow a b -> arrow a c
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
.
   arrow (WithEnvelopeControl b) (T EnvelopeControl b)
forall (arrow :: * -> * -> *) remainder.
(Arrow arrow, Read remainder) =>
arrow (WithEnvelopeControl remainder) (T EnvelopeControl remainder)
reorderEnvelopeControl


ping :: IO (Instrument Real Chunk)
ping :: IO (Instrument Real Chunk)
ping =
   ((SampleRate Real -> Real -> Real -> T (Vector ()) Chunk)
 -> Instrument Real Chunk)
-> IO (SampleRate Real -> Real -> Real -> T (Vector ()) Chunk)
-> IO (Instrument Real Chunk)
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (\SampleRate Real -> Real -> Real -> T (Vector ()) Chunk
proc SampleRate Real
sampleRate Real
vel Real
freq ->
      SampleRate Real -> Real -> Real -> T (Vector ()) Chunk
proc SampleRate Real
sampleRate Real
vel Real
freq
      T (Vector ()) Chunk -> T GateChunk (Vector ()) -> T GateChunk Chunk
forall b c a. T b c -> T a b -> T a c
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
.
      T GateChunk (Vector ())
forall a. T (Chunk a) (Vector ())
Gate.toStorableVector) (IO (SampleRate Real -> Real -> Real -> T (Vector ()) Chunk)
 -> IO (Instrument Real Chunk))
-> IO (SampleRate Real -> Real -> Real -> T (Vector ()) Chunk)
-> IO (Instrument Real Chunk)
forall a b. (a -> b) -> a -> b
$
   DSL
  (SampleRate Real -> Real -> Real -> T (Vector ()) Chunk)
  (Element
     (In (SampleRate Real -> Real -> Real -> T (Vector ()) Chunk)))
  (Element
     (Out (SampleRate Real -> Real -> Real -> T (Vector ()) Chunk)))
-> IO (SampleRate Real -> Real -> Real -> T (Vector ()) Chunk)
forall f a al b bl.
(Run f, In f ~ a, Default a, Element a ~ al, Out f ~ b, Default b,
 Element b ~ bl) =>
DSL f al bl -> IO f
CausalRender.run (DSL
   (SampleRate Real -> Real -> Real -> T (Vector ()) Chunk)
   (Element
      (In (SampleRate Real -> Real -> Real -> T (Vector ()) Chunk)))
   (Element
      (Out (SampleRate Real -> Real -> Real -> T (Vector ()) Chunk)))
 -> IO (SampleRate Real -> Real -> Real -> T (Vector ()) Chunk))
-> DSL
     (SampleRate Real -> Real -> Real -> T (Vector ()) Chunk)
     (Element
        (In (SampleRate Real -> Real -> Real -> T (Vector ()) Chunk)))
     (Element
        (Out (SampleRate Real -> Real -> Real -> T (Vector ()) Chunk)))
-> IO (SampleRate Real -> Real -> Real -> T (Vector ()) Chunk)
forall a b. (a -> b) -> a -> b
$
   (Arg Number (Exp Real)
 -> Arg Frequency (Exp Real)
 -> SampleRate (Exp Real)
 -> T (T ()) (T (T VectorSize Real)))
-> SampleRate (Exp Real)
-> Unwrapped
     (Arg Number (Exp Real)
      -> Arg Frequency (Exp Real)
      -> SampleRate (Exp Real)
      -> T (T ()) (T (T VectorSize Real)))
forall a f. Wrapped a f => f -> SampleRate a -> Unwrapped f
wrapped ((Arg Number (Exp Real)
  -> Arg Frequency (Exp Real)
  -> SampleRate (Exp Real)
  -> T (T ()) (T (T VectorSize Real)))
 -> SampleRate (Exp Real)
 -> Unwrapped
      (Arg Number (Exp Real)
       -> Arg Frequency (Exp Real)
       -> SampleRate (Exp Real)
       -> T (T ()) (T (T VectorSize Real))))
-> (Arg Number (Exp Real)
    -> Arg Frequency (Exp Real)
    -> SampleRate (Exp Real)
    -> T (T ()) (T (T VectorSize Real)))
-> SampleRate (Exp Real)
-> Unwrapped
     (Arg Number (Exp Real)
      -> Arg Frequency (Exp Real)
      -> SampleRate (Exp Real)
      -> T (T ()) (T (T VectorSize Real)))
forall a b. (a -> b) -> a -> b
$ \(Number Exp Real
vel) (Frequency Exp Real
freq) ->
   (SampleRate (Exp Real) -> Exp Real -> Exp Real)
-> Exp Real
-> (Exp Real
    -> SampleRate (Exp Real) -> T (T ()) (T (T VectorSize Real)))
-> SampleRate (Exp Real)
-> T (T ()) (T (T VectorSize Real))
forall a b c d.
(SampleRate a -> b -> c)
-> b -> (c -> SampleRate a -> d) -> SampleRate a -> d
constant SampleRate (Exp Real) -> Exp Real -> Exp Real
forall a. C a => SampleRate a -> a -> a
time Exp Real
0.2 ((Exp Real
  -> SampleRate (Exp Real) -> T (T ()) (T (T VectorSize Real)))
 -> SampleRate (Exp Real) -> T (T ()) (T (T VectorSize Real)))
-> (Exp Real
    -> SampleRate (Exp Real) -> T (T ()) (T (T VectorSize Real)))
-> SampleRate (Exp Real)
-> T (T ()) (T (T VectorSize Real))
forall a b. (a -> b) -> a -> b
$ \Exp Real
halfLife SampleRate (Exp Real)
_sr ->
      SignalOf T (T (T VectorSize Real))
-> T (T ()) (T (T VectorSize Real))
forall b a. SignalOf T b -> T a b
forall (process :: * -> * -> *) b a.
C process =>
SignalOf process b -> process a b
Causal.fromSignal (SignalOf T (T (T VectorSize Real))
 -> T (T ()) (T (T VectorSize Real)))
-> SignalOf T (T (T VectorSize Real))
-> T (T ()) (T (T VectorSize Real))
forall a b. (a -> b) -> a -> b
$
         Exp Real -> Exp Real -> T (T (T VectorSize Real))
forall n a.
(Vector n a, Transcendental a, RationalConstant a) =>
Exp a -> Exp a -> T (Serial n a)
SigPS.exponential2 Exp Real
halfLife (Exp Real -> Exp Real
forall a. C a => a -> a
amplitudeFromVelocity Exp Real
vel)
         T (T (T VectorSize Real))
-> T (T (T VectorSize Real)) -> T (T (T VectorSize Real))
forall a. C a => a -> a -> a
*
         (forall r.
 T (T VectorSize Real) -> CodeGenFunction r (T (T VectorSize Real)))
-> Exp Real -> Exp Real -> T (T (T VectorSize Real))
forall n t y.
(Vector n t, PseudoRing t, Fraction t, IntegerConstant t) =>
(forall r. Serial n t -> CodeGenFunction r y)
-> Exp t -> Exp t -> T y
SigPS.osci T (T VectorSize Real) -> CodeGenFunction r (T (T VectorSize Real))
forall r.
T (T VectorSize Real) -> CodeGenFunction r (T (T VectorSize Real))
forall a r.
(PseudoRing a, IntegerConstant a) =>
a -> CodeGenFunction r a
WaveL.saw Exp Real
forall a. C a => a
zero Exp Real
freq


pingReleaseEnvelope ::
   IO (Real -> Real ->
       SampleRate Real -> Real ->
       PIO.T MIO.GateChunk Chunk)
pingReleaseEnvelope :: IO (Real -> Real -> SampleRate Real -> Real -> T GateChunk Chunk)
pingReleaseEnvelope =
   ((SampleRate Real -> Real -> Real -> T LazySize Chunk)
 -> (SampleRate Real -> Real -> Real -> T LazySize Chunk)
 -> Real
 -> Real
 -> SampleRate Real
 -> Real
 -> T GateChunk Chunk)
-> IO (SampleRate Real -> Real -> Real -> T LazySize Chunk)
-> IO (SampleRate Real -> Real -> Real -> T LazySize Chunk)
-> IO
     (Real -> Real -> SampleRate Real -> Real -> T GateChunk Chunk)
forall a b c. (a -> b -> c) -> IO a -> IO b -> IO c
forall (f :: * -> *) a b c.
Applicative f =>
(a -> b -> c) -> f a -> f b -> f c
liftA2
      (\SampleRate Real -> Real -> Real -> T LazySize Chunk
sustain SampleRate Real -> Real -> Real -> T LazySize Chunk
release Real
dec Real
rel SampleRate Real
sr Real
vel ->
         T GateChunk Chunk
-> (Real -> T GateChunk Chunk) -> T GateChunk Chunk
forall a b n.
(Transform a, Vector b, Positive n) =>
T a (Vector (T n b))
-> (b -> T a (Vector (T n b))) -> T a (Vector (T n b))
PSt.continuePacked
            (SampleRate Real -> Real -> Real -> T LazySize Chunk
sustain SampleRate Real
sr Real
dec Real
vel
             T LazySize Chunk -> T GateChunk LazySize -> T GateChunk Chunk
forall b c a. T b c -> T a b -> T a c
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
.
             T GateChunk LazySize
forall a. T (Chunk a) LazySize
Gate.toChunkySize)
            (\Real
y ->
               SampleRate Real -> Real -> Real -> T LazySize Chunk
release SampleRate Real
sr Real
rel Real
y
               T LazySize Chunk -> T GateChunk LazySize -> T GateChunk Chunk
forall b c a. T b c -> T a b -> T a c
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
.
               T GateChunk LazySize
forall (arrow :: * -> * -> *) a.
Arrow arrow =>
arrow (Chunk a) LazySize
Gate.allToChunkySize))
      (DSL
  (SampleRate Real -> Real -> Real -> T LazySize Chunk)
  (Element
     (In (SampleRate Real -> Real -> Real -> T LazySize Chunk)))
  (Element
     (Out (SampleRate Real -> Real -> Real -> T LazySize Chunk)))
-> IO (SampleRate Real -> Real -> Real -> T LazySize Chunk)
forall f a al b bl.
(Run f, In f ~ a, Default a, Element a ~ al, Out f ~ b, Default b,
 Element b ~ bl) =>
DSL f al bl -> IO f
CausalRender.run (DSL
   (SampleRate Real -> Real -> Real -> T LazySize Chunk)
   (Element
      (In (SampleRate Real -> Real -> Real -> T LazySize Chunk)))
   (Element
      (Out (SampleRate Real -> Real -> Real -> T LazySize Chunk)))
 -> IO (SampleRate Real -> Real -> Real -> T LazySize Chunk))
-> DSL
     (SampleRate Real -> Real -> Real -> T LazySize Chunk)
     (Element
        (In (SampleRate Real -> Real -> Real -> T LazySize Chunk)))
     (Element
        (Out (SampleRate Real -> Real -> Real -> T LazySize Chunk)))
-> IO (SampleRate Real -> Real -> Real -> T LazySize Chunk)
forall a b. (a -> b) -> a -> b
$
       (Arg Time (Exp Real)
 -> Arg Number (Exp Real)
 -> SampleRate (Exp Real)
 -> T () (T (T VectorSize Real)))
-> SampleRate (Exp Real)
-> Unwrapped
     (Arg Time (Exp Real)
      -> Arg Number (Exp Real)
      -> SampleRate (Exp Real)
      -> T () (T (T VectorSize Real)))
forall a f. Wrapped a f => f -> SampleRate a -> Unwrapped f
wrapped ((Arg Time (Exp Real)
  -> Arg Number (Exp Real)
  -> SampleRate (Exp Real)
  -> T () (T (T VectorSize Real)))
 -> SampleRate (Exp Real)
 -> Unwrapped
      (Arg Time (Exp Real)
       -> Arg Number (Exp Real)
       -> SampleRate (Exp Real)
       -> T () (T (T VectorSize Real))))
-> (Arg Time (Exp Real)
    -> Arg Number (Exp Real)
    -> SampleRate (Exp Real)
    -> T () (T (T VectorSize Real)))
-> SampleRate (Exp Real)
-> Unwrapped
     (Arg Time (Exp Real)
      -> Arg Number (Exp Real)
      -> SampleRate (Exp Real)
      -> T () (T (T VectorSize Real)))
forall a b. (a -> b) -> a -> b
$ \(Time Exp Real
decay) (Number Exp Real
vel) (SampleRate Exp Real
_sr) ->
         SignalOf T (T (T VectorSize Real)) -> T () (T (T VectorSize Real))
forall b a. SignalOf T b -> T a b
forall (process :: * -> * -> *) b a.
C process =>
SignalOf process b -> process a b
Causal.fromSignal (SignalOf T (T (T VectorSize Real))
 -> T () (T (T VectorSize Real)))
-> SignalOf T (T (T VectorSize Real))
-> T () (T (T VectorSize Real))
forall a b. (a -> b) -> a -> b
$
         Exp Real -> Exp Real -> T (T (T VectorSize Real))
forall n a.
(Vector n a, Transcendental a, RationalConstant a) =>
Exp a -> Exp a -> T (Serial n a)
SigPS.exponential2
            -- FixMe: is division vectorSize correct?
            (Exp Real
decay Exp Real -> Exp Real -> Exp Real
forall a. C a => a -> a -> a
/ Int -> Exp Real
forall a b. (C a, C b) => a -> b
fromIntegral Int
vectorSize) (Exp Real -> Exp Real
forall a. C a => a -> a
amplitudeFromVelocity Exp Real
vel))
      (DSL
  (SampleRate Real -> Real -> Real -> T LazySize Chunk)
  (Element
     (In (SampleRate Real -> Real -> Real -> T LazySize Chunk)))
  (Element
     (Out (SampleRate Real -> Real -> Real -> T LazySize Chunk)))
-> IO (SampleRate Real -> Real -> Real -> T LazySize Chunk)
forall f a al b bl.
(Run f, In f ~ a, Default a, Element a ~ al, Out f ~ b, Default b,
 Element b ~ bl) =>
DSL f al bl -> IO f
CausalRender.run (DSL
   (SampleRate Real -> Real -> Real -> T LazySize Chunk)
   (Element
      (In (SampleRate Real -> Real -> Real -> T LazySize Chunk)))
   (Element
      (Out (SampleRate Real -> Real -> Real -> T LazySize Chunk)))
 -> IO (SampleRate Real -> Real -> Real -> T LazySize Chunk))
-> DSL
     (SampleRate Real -> Real -> Real -> T LazySize Chunk)
     (Element
        (In (SampleRate Real -> Real -> Real -> T LazySize Chunk)))
     (Element
        (Out (SampleRate Real -> Real -> Real -> T LazySize Chunk)))
-> IO (SampleRate Real -> Real -> Real -> T LazySize Chunk)
forall a b. (a -> b) -> a -> b
$
       (Arg Time (Exp Real)
 -> Arg Number (Exp Real)
 -> SampleRate (Exp Real)
 -> T () (T (T VectorSize Real)))
-> SampleRate (Exp Real)
-> Unwrapped
     (Arg Time (Exp Real)
      -> Arg Number (Exp Real)
      -> SampleRate (Exp Real)
      -> T () (T (T VectorSize Real)))
forall a f. Wrapped a f => f -> SampleRate a -> Unwrapped f
wrapped ((Arg Time (Exp Real)
  -> Arg Number (Exp Real)
  -> SampleRate (Exp Real)
  -> T () (T (T VectorSize Real)))
 -> SampleRate (Exp Real)
 -> Unwrapped
      (Arg Time (Exp Real)
       -> Arg Number (Exp Real)
       -> SampleRate (Exp Real)
       -> T () (T (T VectorSize Real))))
-> (Arg Time (Exp Real)
    -> Arg Number (Exp Real)
    -> SampleRate (Exp Real)
    -> T () (T (T VectorSize Real)))
-> SampleRate (Exp Real)
-> Unwrapped
     (Arg Time (Exp Real)
      -> Arg Number (Exp Real)
      -> SampleRate (Exp Real)
      -> T () (T (T VectorSize Real)))
forall a b. (a -> b) -> a -> b
$ \(Time Exp Real
releaseHL) (Number Exp Real
level) ->
       (SampleRate (Exp Real) -> Exp Real -> Exp Real)
-> Exp Real
-> (Exp Real
    -> SampleRate (Exp Real) -> T () (T (T VectorSize Real)))
-> SampleRate (Exp Real)
-> T () (T (T VectorSize Real))
forall a b c d.
(SampleRate a -> b -> c)
-> b -> (c -> SampleRate a -> d) -> SampleRate a -> d
constant SampleRate (Exp Real) -> Exp Real -> Exp Real
forall a. C a => SampleRate a -> a -> a
time Exp Real
1 ((Exp Real
  -> SampleRate (Exp Real) -> T () (T (T VectorSize Real)))
 -> SampleRate (Exp Real) -> T () (T (T VectorSize Real)))
-> (Exp Real
    -> SampleRate (Exp Real) -> T () (T (T VectorSize Real)))
-> SampleRate (Exp Real)
-> T () (T (T VectorSize Real))
forall a b. (a -> b) -> a -> b
$ \Exp Real
releaseTime SampleRate (Exp Real)
_sr ->
         Exp Word -> T (T (T VectorSize Real)) (T (T VectorSize Real))
forall a. Exp Word -> T a a
Causal.take
            (Exp Real -> Exp Word
forall i ir a ar.
(NativeInteger i ir, NativeFloating a ar) =>
Exp a -> Exp i
Expr.roundToIntFast (Exp Real -> Exp Word) -> Exp Real -> Exp Word
forall a b. (a -> b) -> a -> b
$ Exp Real
releaseTime Exp Real -> Exp Real -> Exp Real
forall a. C a => a -> a -> a
/ Int -> Exp Real
forall a b. (C a, C b) => a -> b
fromIntegral Int
vectorSize)
         T (T (T VectorSize Real)) (T (T VectorSize Real))
-> T () (T (T VectorSize Real)) -> T () (T (T VectorSize Real))
forall b c a. T b c -> T a b -> T a c
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
.
         SignalOf T (T (T VectorSize Real)) -> T () (T (T VectorSize Real))
forall b a. SignalOf T b -> T a b
forall (process :: * -> * -> *) b a.
C process =>
SignalOf process b -> process a b
Causal.fromSignal (Exp Real -> Exp Real -> T (T (T VectorSize Real))
forall n a.
(Vector n a, Transcendental a, RationalConstant a) =>
Exp a -> Exp a -> T (Serial n a)
SigPS.exponential2 Exp Real
releaseHL Exp Real
level))

pingRelease :: IO (Real -> Real -> Instrument Real Chunk)
pingRelease :: IO (Real -> Real -> Instrument Real Chunk)
pingRelease =
   ((SampleRate Real -> Real -> T Chunk Chunk)
 -> (Real -> Real -> SampleRate Real -> Real -> T GateChunk Chunk)
 -> Real
 -> Real
 -> Instrument Real Chunk)
-> IO (SampleRate Real -> Real -> T Chunk Chunk)
-> IO
     (Real -> Real -> SampleRate Real -> Real -> T GateChunk Chunk)
-> IO (Real -> Real -> Instrument Real Chunk)
forall a b c. (a -> b -> c) -> IO a -> IO b -> IO c
forall (f :: * -> *) a b c.
Applicative f =>
(a -> b -> c) -> f a -> f b -> f c
liftA2
      (\SampleRate Real -> Real -> T Chunk Chunk
osci Real -> Real -> SampleRate Real -> Real -> T GateChunk Chunk
envelope Real
dec Real
rel SampleRate Real
sr Real
vel Real
freq ->
         SampleRate Real -> Real -> T Chunk Chunk
osci SampleRate Real
sr Real
freq
         T Chunk Chunk -> T GateChunk Chunk -> T GateChunk Chunk
forall b c a. T b c -> T a b -> T a c
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
.
         Real -> Real -> SampleRate Real -> Real -> T GateChunk Chunk
envelope Real
dec Real
rel SampleRate Real
sr Real
vel)
      (DSL
  (SampleRate Real -> Real -> T Chunk Chunk)
  (Element (In (SampleRate Real -> Real -> T Chunk Chunk)))
  (Element (Out (SampleRate Real -> Real -> T Chunk Chunk)))
-> IO (SampleRate Real -> Real -> T Chunk Chunk)
forall f a al b bl.
(Run f, In f ~ a, Default a, Element a ~ al, Out f ~ b, Default b,
 Element b ~ bl) =>
DSL f al bl -> IO f
CausalRender.run (DSL
   (SampleRate Real -> Real -> T Chunk Chunk)
   (Element (In (SampleRate Real -> Real -> T Chunk Chunk)))
   (Element (Out (SampleRate Real -> Real -> T Chunk Chunk)))
 -> IO (SampleRate Real -> Real -> T Chunk Chunk))
-> DSL
     (SampleRate Real -> Real -> T Chunk Chunk)
     (Element (In (SampleRate Real -> Real -> T Chunk Chunk)))
     (Element (Out (SampleRate Real -> Real -> T Chunk Chunk)))
-> IO (SampleRate Real -> Real -> T Chunk Chunk)
forall a b. (a -> b) -> a -> b
$
       (Arg Frequency (Exp Real)
 -> SampleRate (Exp Real)
 -> T (T (T VectorSize Real)) (T (T VectorSize Real)))
-> SampleRate (Exp Real)
-> Unwrapped
     (Arg Frequency (Exp Real)
      -> SampleRate (Exp Real)
      -> T (T (T VectorSize Real)) (T (T VectorSize Real)))
forall a f. Wrapped a f => f -> SampleRate a -> Unwrapped f
wrapped ((Arg Frequency (Exp Real)
  -> SampleRate (Exp Real)
  -> T (T (T VectorSize Real)) (T (T VectorSize Real)))
 -> SampleRate (Exp Real)
 -> Unwrapped
      (Arg Frequency (Exp Real)
       -> SampleRate (Exp Real)
       -> T (T (T VectorSize Real)) (T (T VectorSize Real))))
-> (Arg Frequency (Exp Real)
    -> SampleRate (Exp Real)
    -> T (T (T VectorSize Real)) (T (T VectorSize Real)))
-> SampleRate (Exp Real)
-> Unwrapped
     (Arg Frequency (Exp Real)
      -> SampleRate (Exp Real)
      -> T (T (T VectorSize Real)) (T (T VectorSize Real)))
forall a b. (a -> b) -> a -> b
$ \(Frequency Exp Real
freq) (SampleRate Exp Real
_sr) ->
         T (T (T VectorSize Real), T (T VectorSize Real))
  (T (T VectorSize Real))
forall a. PseudoRing a => T (a, a) a
Causal.envelope T (T (T VectorSize Real), T (T VectorSize Real))
  (T (T VectorSize Real))
-> SignalOf T (T (T VectorSize Real))
-> T (T (T VectorSize Real)) (T (T VectorSize Real))
forall (process :: * -> * -> *) a b c.
C process =>
process (a, b) c -> SignalOf process b -> process a c
$> (forall r.
 T (T VectorSize Real) -> CodeGenFunction r (T (T VectorSize Real)))
-> Exp Real -> Exp Real -> T (T (T VectorSize Real))
forall n t y.
(Vector n t, PseudoRing t, Fraction t, IntegerConstant t) =>
(forall r. Serial n t -> CodeGenFunction r y)
-> Exp t -> Exp t -> T y
SigPS.osci T (T VectorSize Real) -> CodeGenFunction r (T (T VectorSize Real))
forall r.
T (T VectorSize Real) -> CodeGenFunction r (T (T VectorSize Real))
forall a r.
(PseudoRing a, IntegerConstant a) =>
a -> CodeGenFunction r a
WaveL.saw Exp Real
forall a. C a => a
zero Exp Real
freq)
      IO (Real -> Real -> SampleRate Real -> Real -> T GateChunk Chunk)
pingReleaseEnvelope


pingControlledEnvelope ::
   Maybe Real ->
   IO (SampleRate Real -> Real ->
       PIO.T EnvelopeControl Chunk)
pingControlledEnvelope :: Maybe Real
-> IO (SampleRate Real -> Real -> T EnvelopeControl Chunk)
pingControlledEnvelope Maybe Real
threshold =
   ((SampleRate Real
  -> Real
  -> T (T ShortStrictTime (ParameterPacked (T VectorSize Real)))
       Chunk)
 -> (SampleRate Real
     -> Real
     -> T (T ShortStrictTime (ParameterPacked (T VectorSize Real)))
          Chunk)
 -> SampleRate Real
 -> Real
 -> T EnvelopeControl Chunk)
-> IO
     (SampleRate Real
      -> Real
      -> T (T ShortStrictTime (ParameterPacked (T VectorSize Real)))
           Chunk)
-> IO
     (SampleRate Real
      -> Real
      -> T (T ShortStrictTime (ParameterPacked (T VectorSize Real)))
           Chunk)
-> IO (SampleRate Real -> Real -> T EnvelopeControl Chunk)
forall a b c. (a -> b -> c) -> IO a -> IO b -> IO c
forall (f :: * -> *) a b c.
Applicative f =>
(a -> b -> c) -> f a -> f b -> f c
liftA2
      (\SampleRate Real
-> Real
-> T (T ShortStrictTime (ParameterPacked (T VectorSize Real)))
     Chunk
sustain SampleRate Real
-> Real
-> T (T ShortStrictTime (ParameterPacked (T VectorSize Real)))
     Chunk
release SampleRate Real
sr Real
vel ->
         T EnvelopeControl Chunk
-> (Real -> T EnvelopeControl Chunk) -> T EnvelopeControl Chunk
forall a b n.
(Transform a, Vector b, Positive n) =>
T a (Vector (T n b))
-> (b -> T a (Vector (T n b))) -> T a (Vector (T n b))
PSt.continuePacked
            (SampleRate Real
-> Real
-> T (T ShortStrictTime (ParameterPacked (T VectorSize Real)))
     Chunk
sustain SampleRate Real
sr Real
vel
             T (T ShortStrictTime (ParameterPacked (T VectorSize Real))) Chunk
-> T EnvelopeControl
     (T ShortStrictTime (ParameterPacked (T VectorSize Real)))
-> T EnvelopeControl Chunk
forall b c a. T b c -> T a b -> T a c
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
.
             T (T GateChunk
     (T ShortStrictTime (ParameterPacked (T VectorSize Real))))
  (T ShortStrictTime (ParameterPacked (T VectorSize Real)))
forall signal a. Transform signal => T (T (Chunk a) signal) signal
Gate.shorten
             T (T GateChunk
     (T ShortStrictTime (ParameterPacked (T VectorSize Real))))
  (T ShortStrictTime (ParameterPacked (T VectorSize Real)))
-> T EnvelopeControl
     (T GateChunk
        (T ShortStrictTime (ParameterPacked (T VectorSize Real))))
-> T EnvelopeControl
     (T ShortStrictTime (ParameterPacked (T VectorSize Real)))
forall b c a. T b c -> T a b -> T a c
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
.
             T (T (Control Time) (Control Time))
  (T ShortStrictTime (ParameterPacked (T VectorSize Real)))
-> T EnvelopeControl
     (T GateChunk
        (T ShortStrictTime (ParameterPacked (T VectorSize Real))))
forall (arrow :: * -> * -> *) a b c.
Arrow arrow =>
arrow a b -> arrow (T c a) (T c b)
Zip.arrowSecond ((T (Control Time) (Control Time)
 -> T ShortStrictTime (ParameterPacked (T VectorSize Real)))
-> T (T (Control Time) (Control Time))
     (T ShortStrictTime (ParameterPacked (T VectorSize Real)))
forall b c. (b -> c) -> T b c
forall (a :: * -> * -> *) b c. Arrow a => (b -> c) -> a b c
arr (SampleRate Real
-> Control Time
-> T ShortStrictTime (ParameterPacked (T VectorSize Real))
forall (f :: * -> *).
Functor f =>
SampleRate Real
-> f Time -> f (ParameterPacked (T VectorSize Real))
halfLifeControl SampleRate Real
sr (Control Time
 -> T ShortStrictTime (ParameterPacked (T VectorSize Real)))
-> (T (Control Time) (Control Time) -> Control Time)
-> T (Control Time) (Control Time)
-> T ShortStrictTime (ParameterPacked (T VectorSize Real))
forall b c a. (b -> c) -> (a -> b) -> a -> c
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. T (Control Time) (Control Time) -> Control Time
forall a b. T a b -> a
Zip.first)))
            (\Real
y ->
             SampleRate Real
-> Real
-> T (T ShortStrictTime (ParameterPacked (T VectorSize Real)))
     Chunk
release SampleRate Real
sr Real
y
             T (T ShortStrictTime (ParameterPacked (T VectorSize Real))) Chunk
-> (EnvelopeControl
    -> T ShortStrictTime (ParameterPacked (T VectorSize Real)))
-> T EnvelopeControl Chunk
forall (a :: * -> * -> *) c d b.
Arrow a =>
a c d -> (b -> c) -> a b d
<<^
             SampleRate Real
-> Control Time
-> T ShortStrictTime (ParameterPacked (T VectorSize Real))
forall (f :: * -> *).
Functor f =>
SampleRate Real
-> f Time -> f (ParameterPacked (T VectorSize Real))
halfLifeControl SampleRate Real
sr (Control Time
 -> T ShortStrictTime (ParameterPacked (T VectorSize Real)))
-> (EnvelopeControl -> Control Time)
-> EnvelopeControl
-> T ShortStrictTime (ParameterPacked (T VectorSize Real))
forall b c a. (b -> c) -> (a -> b) -> a -> c
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. T (Control Time) (Control Time) -> Control Time
forall a b. T a b -> b
Zip.second (T (Control Time) (Control Time) -> Control Time)
-> (EnvelopeControl -> T (Control Time) (Control Time))
-> EnvelopeControl
-> Control Time
forall b c a. (b -> c) -> (a -> b) -> a -> c
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. EnvelopeControl -> T (Control Time) (Control Time)
forall a b. T a b -> b
Zip.second))
      (DSL
  (SampleRate Real
   -> Real
   -> T (T ShortStrictTime (ParameterPacked (T VectorSize Real)))
        Chunk)
  (Element
     (In
        (SampleRate Real
         -> Real
         -> T (T ShortStrictTime (ParameterPacked (T VectorSize Real)))
              Chunk)))
  (Element
     (Out
        (SampleRate Real
         -> Real
         -> T (T ShortStrictTime (ParameterPacked (T VectorSize Real)))
              Chunk)))
-> IO
     (SampleRate Real
      -> Real
      -> T (T ShortStrictTime (ParameterPacked (T VectorSize Real)))
           Chunk)
forall f a al b bl.
(Run f, In f ~ a, Default a, Element a ~ al, Out f ~ b, Default b,
 Element b ~ bl) =>
DSL f al bl -> IO f
CausalRender.run (DSL
   (SampleRate Real
    -> Real
    -> T (T ShortStrictTime (ParameterPacked (T VectorSize Real)))
         Chunk)
   (Element
      (In
         (SampleRate Real
          -> Real
          -> T (T ShortStrictTime (ParameterPacked (T VectorSize Real)))
               Chunk)))
   (Element
      (Out
         (SampleRate Real
          -> Real
          -> T (T ShortStrictTime (ParameterPacked (T VectorSize Real)))
               Chunk)))
 -> IO
      (SampleRate Real
       -> Real
       -> T (T ShortStrictTime (ParameterPacked (T VectorSize Real)))
            Chunk))
-> DSL
     (SampleRate Real
      -> Real
      -> T (T ShortStrictTime (ParameterPacked (T VectorSize Real)))
           Chunk)
     (Element
        (In
           (SampleRate Real
            -> Real
            -> T (T ShortStrictTime (ParameterPacked (T VectorSize Real)))
                 Chunk)))
     (Element
        (Out
           (SampleRate Real
            -> Real
            -> T (T ShortStrictTime (ParameterPacked (T VectorSize Real)))
                 Chunk)))
-> IO
     (SampleRate Real
      -> Real
      -> T (T ShortStrictTime (ParameterPacked (T VectorSize Real)))
           Chunk)
forall a b. (a -> b) -> a -> b
$
       (Arg Number (Exp Real)
 -> SampleRate (Exp Real)
 -> T (T (ParameterPacked (T VectorSize Real)))
      (T (T VectorSize Real)))
-> SampleRate (Exp Real)
-> Unwrapped
     (Arg Number (Exp Real)
      -> SampleRate (Exp Real)
      -> T (T (ParameterPacked (T VectorSize Real)))
           (T (T VectorSize Real)))
forall a f. Wrapped a f => f -> SampleRate a -> Unwrapped f
wrapped ((Arg Number (Exp Real)
  -> SampleRate (Exp Real)
  -> T (T (ParameterPacked (T VectorSize Real)))
       (T (T VectorSize Real)))
 -> SampleRate (Exp Real)
 -> Unwrapped
      (Arg Number (Exp Real)
       -> SampleRate (Exp Real)
       -> T (T (ParameterPacked (T VectorSize Real)))
            (T (T VectorSize Real))))
-> (Arg Number (Exp Real)
    -> SampleRate (Exp Real)
    -> T (T (ParameterPacked (T VectorSize Real)))
         (T (T VectorSize Real)))
-> SampleRate (Exp Real)
-> Unwrapped
     (Arg Number (Exp Real)
      -> SampleRate (Exp Real)
      -> T (T (ParameterPacked (T VectorSize Real)))
           (T (T VectorSize Real)))
forall a b. (a -> b) -> a -> b
$ \(Number Exp Real
vel) (SampleRate Exp Real
_sr) ->
         Exp Real
-> T (ParameterPacked (T (T VectorSize Real)))
     (T (T VectorSize Real))
forall a n.
(PseudoRing a, IntegerConstant a, Positive n, Vector n a, C a) =>
Exp a -> T (ParameterPacked (Value n a)) (Value n a)
Exp.causalPacked (Exp Real -> Exp Real
forall a. C a => a -> a
amplitudeFromVelocity Exp Real
vel)
            T (ParameterPacked (T (T VectorSize Real))) (T (T VectorSize Real))
-> (T (ParameterPacked (T VectorSize Real))
    -> ParameterPacked (T (T VectorSize Real)))
-> T (T (ParameterPacked (T VectorSize Real)))
     (T (T VectorSize Real))
forall (a :: * -> * -> *) c d b.
Arrow a =>
a c d -> (b -> c) -> a b d
<<^ T (ParameterPacked (T VectorSize Real))
-> ParameterPacked (T (T VectorSize Real))
forall a. T (ParameterPacked a) -> ParameterPacked (T a)
Exp.unMultiValueParameterPacked)
      (DSL
  (SampleRate Real
   -> Real
   -> T (T ShortStrictTime (ParameterPacked (T VectorSize Real)))
        Chunk)
  (Element
     (In
        (SampleRate Real
         -> Real
         -> T (T ShortStrictTime (ParameterPacked (T VectorSize Real)))
              Chunk)))
  (Element
     (Out
        (SampleRate Real
         -> Real
         -> T (T ShortStrictTime (ParameterPacked (T VectorSize Real)))
              Chunk)))
-> IO
     (SampleRate Real
      -> Real
      -> T (T ShortStrictTime (ParameterPacked (T VectorSize Real)))
           Chunk)
forall f a al b bl.
(Run f, In f ~ a, Default a, Element a ~ al, Out f ~ b, Default b,
 Element b ~ bl) =>
DSL f al bl -> IO f
CausalRender.run (DSL
   (SampleRate Real
    -> Real
    -> T (T ShortStrictTime (ParameterPacked (T VectorSize Real)))
         Chunk)
   (Element
      (In
         (SampleRate Real
          -> Real
          -> T (T ShortStrictTime (ParameterPacked (T VectorSize Real)))
               Chunk)))
   (Element
      (Out
         (SampleRate Real
          -> Real
          -> T (T ShortStrictTime (ParameterPacked (T VectorSize Real)))
               Chunk)))
 -> IO
      (SampleRate Real
       -> Real
       -> T (T ShortStrictTime (ParameterPacked (T VectorSize Real)))
            Chunk))
-> DSL
     (SampleRate Real
      -> Real
      -> T (T ShortStrictTime (ParameterPacked (T VectorSize Real)))
           Chunk)
     (Element
        (In
           (SampleRate Real
            -> Real
            -> T (T ShortStrictTime (ParameterPacked (T VectorSize Real)))
                 Chunk)))
     (Element
        (Out
           (SampleRate Real
            -> Real
            -> T (T ShortStrictTime (ParameterPacked (T VectorSize Real)))
                 Chunk)))
-> IO
     (SampleRate Real
      -> Real
      -> T (T ShortStrictTime (ParameterPacked (T VectorSize Real)))
           Chunk)
forall a b. (a -> b) -> a -> b
$
       (Arg Number (Exp Real)
 -> SampleRate (Exp Real)
 -> T (T (ParameterPacked (T VectorSize Real)))
      (T (T VectorSize Real)))
-> SampleRate (Exp Real)
-> Unwrapped
     (Arg Number (Exp Real)
      -> SampleRate (Exp Real)
      -> T (T (ParameterPacked (T VectorSize Real)))
           (T (T VectorSize Real)))
forall a f. Wrapped a f => f -> SampleRate a -> Unwrapped f
wrapped ((Arg Number (Exp Real)
  -> SampleRate (Exp Real)
  -> T (T (ParameterPacked (T VectorSize Real)))
       (T (T VectorSize Real)))
 -> SampleRate (Exp Real)
 -> Unwrapped
      (Arg Number (Exp Real)
       -> SampleRate (Exp Real)
       -> T (T (ParameterPacked (T VectorSize Real)))
            (T (T VectorSize Real))))
-> (Arg Number (Exp Real)
    -> SampleRate (Exp Real)
    -> T (T (ParameterPacked (T VectorSize Real)))
         (T (T VectorSize Real)))
-> SampleRate (Exp Real)
-> Unwrapped
     (Arg Number (Exp Real)
      -> SampleRate (Exp Real)
      -> T (T (ParameterPacked (T VectorSize Real)))
           (T (T VectorSize Real)))
forall a b. (a -> b) -> a -> b
$ \(Number Exp Real
level) (SampleRate Exp Real
_sr) ->
         let expo :: T (T (ParameterPacked (T VectorSize Real))) (T (T VectorSize Real))
expo = Exp Real
-> T (ParameterPacked (T (T VectorSize Real)))
     (T (T VectorSize Real))
forall a n.
(PseudoRing a, IntegerConstant a, Positive n, Vector n a, C a) =>
Exp a -> T (ParameterPacked (Value n a)) (Value n a)
Exp.causalPacked Exp Real
level T (ParameterPacked (T (T VectorSize Real))) (T (T VectorSize Real))
-> (T (ParameterPacked (T VectorSize Real))
    -> ParameterPacked (T (T VectorSize Real)))
-> T (T (ParameterPacked (T VectorSize Real)))
     (T (T VectorSize Real))
forall (a :: * -> * -> *) c d b.
Arrow a =>
a c d -> (b -> c) -> a b d
<<^ T (ParameterPacked (T VectorSize Real))
-> ParameterPacked (T (T VectorSize Real))
forall a. T (ParameterPacked a) -> ParameterPacked (T a)
Exp.unMultiValueParameterPacked
         in  case Maybe Real
threshold of
                Just Real
y -> Exp Real -> T (T (T VectorSize Real)) (T (T VectorSize Real))
takeThreshold (Real -> Exp Real
forall a. C a => a -> Exp a
Expr.cons Real
y) T (T (T VectorSize Real)) (T (T VectorSize Real))
-> T (T (ParameterPacked (T VectorSize Real)))
     (T (T VectorSize Real))
-> T (T (ParameterPacked (T VectorSize Real)))
     (T (T VectorSize Real))
forall b c a. T b c -> T a b -> T a c
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. T (T (ParameterPacked (T VectorSize Real))) (T (T VectorSize Real))
expo
                Maybe Real
Nothing -> T (T (ParameterPacked (T VectorSize Real))) (T (T VectorSize Real))
expo)


pingStereoReleaseFM ::
   IO (SampleRate Real -> Real -> Real ->
       PIO.T
          (WithEnvelopeControl
             (Zip.T
                (Zip.T (Control Real) (Control Time))
                (Zip.T
                   (Zip.T (Control Real) (Control Time))
                   DetuneBendModControl)))
          StereoChunk)
pingStereoReleaseFM :: IO
  (SampleRate Real
   -> Real
   -> Real
   -> T (WithEnvelopeControl
           (T (T (Control Real) (Control Time))
              (T (T (Control Real) (Control Time)) DetuneBendModControl)))
        StereoChunk)
pingStereoReleaseFM =
   ((SampleRate Real
  -> T (T Chunk
          (T (T (Control Real)
                (T ShortStrictTime (ParameterPacked (T VectorSize Real))))
             (T (T (Control Real)
                   (T ShortStrictTime (ParameterPacked (T VectorSize Real))))
                DetuneBendModControl)))
       StereoChunk)
 -> (SampleRate Real -> Real -> T EnvelopeControl Chunk)
 -> SampleRate Real
 -> Real
 -> Real
 -> T (WithEnvelopeControl
         (T (T (Control Real) (Control Time))
            (T (T (Control Real) (Control Time)) DetuneBendModControl)))
      StereoChunk)
-> IO
     (SampleRate Real
      -> T (T Chunk
              (T (T (Control Real)
                    (T ShortStrictTime (ParameterPacked (T VectorSize Real))))
                 (T (T (Control Real)
                       (T ShortStrictTime (ParameterPacked (T VectorSize Real))))
                    DetuneBendModControl)))
           StereoChunk)
-> IO (SampleRate Real -> Real -> T EnvelopeControl Chunk)
-> IO
     (SampleRate Real
      -> Real
      -> Real
      -> T (WithEnvelopeControl
              (T (T (Control Real) (Control Time))
                 (T (T (Control Real) (Control Time)) DetuneBendModControl)))
           StereoChunk)
forall a b c. (a -> b -> c) -> IO a -> IO b -> IO c
forall (f :: * -> *) a b c.
Applicative f =>
(a -> b -> c) -> f a -> f b -> f c
liftA2
      (\SampleRate Real
-> T (T Chunk
        (T (T (Control Real)
              (T ShortStrictTime (ParameterPacked (T VectorSize Real))))
           (T (T (Control Real)
                 (T ShortStrictTime (ParameterPacked (T VectorSize Real))))
              DetuneBendModControl)))
     StereoChunk
osc SampleRate Real -> Real -> T EnvelopeControl Chunk
env SampleRate Real
sr Real
vel Real
freq ->
         SampleRate Real
-> T (T Chunk
        (T (T (Control Real)
              (T ShortStrictTime (ParameterPacked (T VectorSize Real))))
           (T (T (Control Real)
                 (T ShortStrictTime (ParameterPacked (T VectorSize Real))))
              DetuneBendModControl)))
     StereoChunk
osc SampleRate Real
sr
         T (T Chunk
     (T (T (Control Real)
           (T ShortStrictTime (ParameterPacked (T VectorSize Real))))
        (T (T (Control Real)
              (T ShortStrictTime (ParameterPacked (T VectorSize Real))))
           DetuneBendModControl)))
  StereoChunk
-> T (WithEnvelopeControl
        (T (T (Control Real) (Control Time))
           (T (T (Control Real) (Control Time)) DetuneBendModControl)))
     (T Chunk
        (T (T (Control Real)
              (T ShortStrictTime (ParameterPacked (T VectorSize Real))))
           (T (T (Control Real)
                 (T ShortStrictTime (ParameterPacked (T VectorSize Real))))
              DetuneBendModControl)))
-> T (WithEnvelopeControl
        (T (T (Control Real) (Control Time))
           (T (T (Control Real) (Control Time)) DetuneBendModControl)))
     StereoChunk
forall b c a. T b c -> T a b -> T a c
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
.
         T (T (T (Control Real) (Control Time))
     (T (T (Control Real) (Control Time)) DetuneBendModControl))
  (T (T (Control Real)
        (T ShortStrictTime (ParameterPacked (T VectorSize Real))))
     (T (T (Control Real)
           (T ShortStrictTime (ParameterPacked (T VectorSize Real))))
        DetuneBendModControl))
-> T (T Chunk
        (T (T (Control Real) (Control Time))
           (T (T (Control Real) (Control Time)) DetuneBendModControl)))
     (T Chunk
        (T (T (Control Real)
              (T ShortStrictTime (ParameterPacked (T VectorSize Real))))
           (T (T (Control Real)
                 (T ShortStrictTime (ParameterPacked (T VectorSize Real))))
              DetuneBendModControl)))
forall (arrow :: * -> * -> *) a b c.
Arrow arrow =>
arrow a b -> arrow (T c a) (T c b)
Zip.arrowSecond
            (T (T (Control Real) (Control Time))
  (T (Control Real)
     (T ShortStrictTime (ParameterPacked (T VectorSize Real))))
-> T (T (T (Control Real) (Control Time)) DetuneBendModControl)
     (T (T (Control Real)
           (T ShortStrictTime (ParameterPacked (T VectorSize Real))))
        DetuneBendModControl)
-> T (T (T (Control Real) (Control Time))
        (T (T (Control Real) (Control Time)) DetuneBendModControl))
     (T (T (Control Real)
           (T ShortStrictTime (ParameterPacked (T VectorSize Real))))
        (T (T (Control Real)
              (T ShortStrictTime (ParameterPacked (T VectorSize Real))))
           DetuneBendModControl))
forall (arrow :: * -> * -> *) a c b d.
Arrow arrow =>
arrow a c -> arrow b d -> arrow (T a b) (T c d)
Zip.arrowSplit
               (T (Control Time)
  (T ShortStrictTime (ParameterPacked (T VectorSize Real)))
-> T (T (Control Real) (Control Time))
     (T (Control Real)
        (T ShortStrictTime (ParameterPacked (T VectorSize Real))))
forall (arrow :: * -> * -> *) a b c.
Arrow arrow =>
arrow a b -> arrow (T c a) (T c b)
Zip.arrowSecond (T (Control Time)
   (T ShortStrictTime (ParameterPacked (T VectorSize Real)))
 -> T (T (Control Real) (Control Time))
      (T (Control Real)
         (T ShortStrictTime (ParameterPacked (T VectorSize Real)))))
-> T (Control Time)
     (T ShortStrictTime (ParameterPacked (T VectorSize Real)))
-> T (T (Control Real) (Control Time))
     (T (Control Real)
        (T ShortStrictTime (ParameterPacked (T VectorSize Real))))
forall a b. (a -> b) -> a -> b
$ (Control Time
 -> T ShortStrictTime (ParameterPacked (T VectorSize Real)))
-> T (Control Time)
     (T ShortStrictTime (ParameterPacked (T VectorSize Real)))
forall b c. (b -> c) -> T b c
forall (a :: * -> * -> *) b c. Arrow a => (b -> c) -> a b c
arr ((Control Time
  -> T ShortStrictTime (ParameterPacked (T VectorSize Real)))
 -> T (Control Time)
      (T ShortStrictTime (ParameterPacked (T VectorSize Real))))
-> (Control Time
    -> T ShortStrictTime (ParameterPacked (T VectorSize Real)))
-> T (Control Time)
     (T ShortStrictTime (ParameterPacked (T VectorSize Real)))
forall a b. (a -> b) -> a -> b
$ SampleRate Real
-> Control Time
-> T ShortStrictTime (ParameterPacked (T VectorSize Real))
forall (f :: * -> *).
Functor f =>
SampleRate Real
-> f Time -> f (ParameterPacked (T VectorSize Real))
halfLifeControl SampleRate Real
sr)
               ((T DetuneBendModControl DetuneBendModControl
-> T (T (T (Control Real)
           (T ShortStrictTime (ParameterPacked (T VectorSize Real))))
        DetuneBendModControl)
     (T (T (Control Real)
           (T ShortStrictTime (ParameterPacked (T VectorSize Real))))
        DetuneBendModControl)
forall (arrow :: * -> * -> *) a b c.
Arrow arrow =>
arrow a b -> arrow (T c a) (T c b)
Zip.arrowSecond (T DetuneBendModControl DetuneBendModControl
 -> T (T (T (Control Real)
            (T ShortStrictTime (ParameterPacked (T VectorSize Real))))
         DetuneBendModControl)
      (T (T (Control Real)
            (T ShortStrictTime (ParameterPacked (T VectorSize Real))))
         DetuneBendModControl))
-> T DetuneBendModControl DetuneBendModControl
-> T (T (T (Control Real)
           (T ShortStrictTime (ParameterPacked (T VectorSize Real))))
        DetuneBendModControl)
     (T (T (Control Real)
           (T ShortStrictTime (ParameterPacked (T VectorSize Real))))
        DetuneBendModControl)
forall a b. (a -> b) -> a -> b
$ T (T ShortStrictTime (T Real)) (T ShortStrictTime (T Real))
-> T DetuneBendModControl DetuneBendModControl
forall (arrow :: * -> * -> *) a b c.
Arrow arrow =>
arrow a b -> arrow (T c a) (T c b)
Zip.arrowSecond (T (T ShortStrictTime (T Real)) (T ShortStrictTime (T Real))
 -> T DetuneBendModControl DetuneBendModControl)
-> T (T ShortStrictTime (T Real)) (T ShortStrictTime (T Real))
-> T DetuneBendModControl DetuneBendModControl
forall a b. (a -> b) -> a -> b
$
                   (T ShortStrictTime (T Real) -> T ShortStrictTime (T Real))
-> T (T ShortStrictTime (T Real)) (T ShortStrictTime (T Real))
forall b c. (b -> c) -> T b c
forall (a :: * -> * -> *) b c. Arrow a => (b -> c) -> a b c
arr ((T ShortStrictTime (T Real) -> T ShortStrictTime (T Real))
 -> T (T ShortStrictTime (T Real)) (T ShortStrictTime (T Real)))
-> (T ShortStrictTime (T Real) -> T ShortStrictTime (T Real))
-> T (T ShortStrictTime (T Real)) (T ShortStrictTime (T Real))
forall a b. (a -> b) -> a -> b
$ SampleRate Real
-> Real -> T ShortStrictTime (T Real) -> T ShortStrictTime (T Real)
forall (stream :: * -> *).
Functor stream =>
SampleRate Real -> Real -> stream (T Real) -> stream (T Real)
transposeModulation SampleRate Real
sr Real
freq)
                T (T (T (Control Real)
        (T ShortStrictTime (ParameterPacked (T VectorSize Real))))
     DetuneBendModControl)
  (T (T (Control Real)
        (T ShortStrictTime (ParameterPacked (T VectorSize Real))))
     DetuneBendModControl)
-> T (T (T (Control Real) (Control Time)) DetuneBendModControl)
     (T (T (Control Real)
           (T ShortStrictTime (ParameterPacked (T VectorSize Real))))
        DetuneBendModControl)
-> T (T (T (Control Real) (Control Time)) DetuneBendModControl)
     (T (T (Control Real)
           (T ShortStrictTime (ParameterPacked (T VectorSize Real))))
        DetuneBendModControl)
forall b c a. T b c -> T a b -> T a c
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
.
                (T (T (Control Real) (Control Time))
  (T (Control Real)
     (T ShortStrictTime (ParameterPacked (T VectorSize Real))))
-> T (T (T (Control Real) (Control Time)) DetuneBendModControl)
     (T (T (Control Real)
           (T ShortStrictTime (ParameterPacked (T VectorSize Real))))
        DetuneBendModControl)
forall (arrow :: * -> * -> *) a b c.
Arrow arrow =>
arrow a b -> arrow (T a c) (T b c)
Zip.arrowFirst (T (T (Control Real) (Control Time))
   (T (Control Real)
      (T ShortStrictTime (ParameterPacked (T VectorSize Real))))
 -> T (T (T (Control Real) (Control Time)) DetuneBendModControl)
      (T (T (Control Real)
            (T ShortStrictTime (ParameterPacked (T VectorSize Real))))
         DetuneBendModControl))
-> T (T (Control Real) (Control Time))
     (T (Control Real)
        (T ShortStrictTime (ParameterPacked (T VectorSize Real))))
-> T (T (T (Control Real) (Control Time)) DetuneBendModControl)
     (T (T (Control Real)
           (T ShortStrictTime (ParameterPacked (T VectorSize Real))))
        DetuneBendModControl)
forall a b. (a -> b) -> a -> b
$ T (Control Time)
  (T ShortStrictTime (ParameterPacked (T VectorSize Real)))
-> T (T (Control Real) (Control Time))
     (T (Control Real)
        (T ShortStrictTime (ParameterPacked (T VectorSize Real))))
forall (arrow :: * -> * -> *) a b c.
Arrow arrow =>
arrow a b -> arrow (T c a) (T c b)
Zip.arrowSecond (T (Control Time)
   (T ShortStrictTime (ParameterPacked (T VectorSize Real)))
 -> T (T (Control Real) (Control Time))
      (T (Control Real)
         (T ShortStrictTime (ParameterPacked (T VectorSize Real)))))
-> T (Control Time)
     (T ShortStrictTime (ParameterPacked (T VectorSize Real)))
-> T (T (Control Real) (Control Time))
     (T (Control Real)
        (T ShortStrictTime (ParameterPacked (T VectorSize Real))))
forall a b. (a -> b) -> a -> b
$
                   (Control Time
 -> T ShortStrictTime (ParameterPacked (T VectorSize Real)))
-> T (Control Time)
     (T ShortStrictTime (ParameterPacked (T VectorSize Real)))
forall b c. (b -> c) -> T b c
forall (a :: * -> * -> *) b c. Arrow a => (b -> c) -> a b c
arr ((Control Time
  -> T ShortStrictTime (ParameterPacked (T VectorSize Real)))
 -> T (Control Time)
      (T ShortStrictTime (ParameterPacked (T VectorSize Real))))
-> (Control Time
    -> T ShortStrictTime (ParameterPacked (T VectorSize Real)))
-> T (Control Time)
     (T ShortStrictTime (ParameterPacked (T VectorSize Real)))
forall a b. (a -> b) -> a -> b
$ SampleRate Real
-> Control Time
-> T ShortStrictTime (ParameterPacked (T VectorSize Real))
forall (f :: * -> *).
Functor f =>
SampleRate Real
-> f Time -> f (ParameterPacked (T VectorSize Real))
halfLifeControl SampleRate Real
sr)))
         T (T Chunk
     (T (T (Control Real) (Control Time))
        (T (T (Control Real) (Control Time)) DetuneBendModControl)))
  (T Chunk
     (T (T (Control Real)
           (T ShortStrictTime (ParameterPacked (T VectorSize Real))))
        (T (T (Control Real)
              (T ShortStrictTime (ParameterPacked (T VectorSize Real))))
           DetuneBendModControl)))
-> T (WithEnvelopeControl
        (T (T (Control Real) (Control Time))
           (T (T (Control Real) (Control Time)) DetuneBendModControl)))
     (T Chunk
        (T (T (Control Real) (Control Time))
           (T (T (Control Real) (Control Time)) DetuneBendModControl)))
-> T (WithEnvelopeControl
        (T (T (Control Real) (Control Time))
           (T (T (Control Real) (Control Time)) DetuneBendModControl)))
     (T Chunk
        (T (T (Control Real)
              (T ShortStrictTime (ParameterPacked (T VectorSize Real))))
           (T (T (Control Real)
                 (T ShortStrictTime (ParameterPacked (T VectorSize Real))))
              DetuneBendModControl)))
forall b c a. T b c -> T a b -> T a c
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
.
         T EnvelopeControl Chunk
-> T (WithEnvelopeControl
        (T (T (Control Real) (Control Time))
           (T (T (Control Real) (Control Time)) DetuneBendModControl)))
     (T Chunk
        (T (T (Control Real) (Control Time))
           (T (T (Control Real) (Control Time)) DetuneBendModControl)))
forall (arrow :: * -> * -> *) a b.
(Arrow arrow, Transform a, Transform b) =>
arrow EnvelopeControl a -> arrow (WithEnvelopeControl b) (T a b)
zipEnvelope (SampleRate Real -> Real -> T EnvelopeControl Chunk
env SampleRate Real
sr Real
vel))
      (DSL
  (SampleRate Real
   -> T (T Chunk
           (T (T (Control Real)
                 (T ShortStrictTime (ParameterPacked (T VectorSize Real))))
              (T (T (Control Real)
                    (T ShortStrictTime (ParameterPacked (T VectorSize Real))))
                 DetuneBendModControl)))
        StereoChunk)
  (Element
     (In
        (SampleRate Real
         -> T (T Chunk
                 (T (T (Control Real)
                       (T ShortStrictTime (ParameterPacked (T VectorSize Real))))
                    (T (T (Control Real)
                          (T ShortStrictTime (ParameterPacked (T VectorSize Real))))
                       DetuneBendModControl)))
              StereoChunk)))
  (Element
     (Out
        (SampleRate Real
         -> T (T Chunk
                 (T (T (Control Real)
                       (T ShortStrictTime (ParameterPacked (T VectorSize Real))))
                    (T (T (Control Real)
                          (T ShortStrictTime (ParameterPacked (T VectorSize Real))))
                       DetuneBendModControl)))
              StereoChunk)))
-> IO
     (SampleRate Real
      -> T (T Chunk
              (T (T (Control Real)
                    (T ShortStrictTime (ParameterPacked (T VectorSize Real))))
                 (T (T (Control Real)
                       (T ShortStrictTime (ParameterPacked (T VectorSize Real))))
                    DetuneBendModControl)))
           StereoChunk)
forall f a al b bl.
(Run f, In f ~ a, Default a, Element a ~ al, Out f ~ b, Default b,
 Element b ~ bl) =>
DSL f al bl -> IO f
CausalRender.run (DSL
   (SampleRate Real
    -> T (T Chunk
            (T (T (Control Real)
                  (T ShortStrictTime (ParameterPacked (T VectorSize Real))))
               (T (T (Control Real)
                     (T ShortStrictTime (ParameterPacked (T VectorSize Real))))
                  DetuneBendModControl)))
         StereoChunk)
   (Element
      (In
         (SampleRate Real
          -> T (T Chunk
                  (T (T (Control Real)
                        (T ShortStrictTime (ParameterPacked (T VectorSize Real))))
                     (T (T (Control Real)
                           (T ShortStrictTime (ParameterPacked (T VectorSize Real))))
                        DetuneBendModControl)))
               StereoChunk)))
   (Element
      (Out
         (SampleRate Real
          -> T (T Chunk
                  (T (T (Control Real)
                        (T ShortStrictTime (ParameterPacked (T VectorSize Real))))
                     (T (T (Control Real)
                           (T ShortStrictTime (ParameterPacked (T VectorSize Real))))
                        DetuneBendModControl)))
               StereoChunk)))
 -> IO
      (SampleRate Real
       -> T (T Chunk
               (T (T (Control Real)
                     (T ShortStrictTime (ParameterPacked (T VectorSize Real))))
                  (T (T (Control Real)
                        (T ShortStrictTime (ParameterPacked (T VectorSize Real))))
                     DetuneBendModControl)))
            StereoChunk))
-> DSL
     (SampleRate Real
      -> T (T Chunk
              (T (T (Control Real)
                    (T ShortStrictTime (ParameterPacked (T VectorSize Real))))
                 (T (T (Control Real)
                       (T ShortStrictTime (ParameterPacked (T VectorSize Real))))
                    DetuneBendModControl)))
           StereoChunk)
     (Element
        (In
           (SampleRate Real
            -> T (T Chunk
                    (T (T (Control Real)
                          (T ShortStrictTime (ParameterPacked (T VectorSize Real))))
                       (T (T (Control Real)
                             (T ShortStrictTime (ParameterPacked (T VectorSize Real))))
                          DetuneBendModControl)))
                 StereoChunk)))
     (Element
        (Out
           (SampleRate Real
            -> T (T Chunk
                    (T (T (Control Real)
                          (T ShortStrictTime (ParameterPacked (T VectorSize Real))))
                       (T (T (Control Real)
                             (T ShortStrictTime (ParameterPacked (T VectorSize Real))))
                          DetuneBendModControl)))
                 StereoChunk)))
-> IO
     (SampleRate Real
      -> T (T Chunk
              (T (T (Control Real)
                    (T ShortStrictTime (ParameterPacked (T VectorSize Real))))
                 (T (T (Control Real)
                       (T ShortStrictTime (ParameterPacked (T VectorSize Real))))
                    DetuneBendModControl)))
           StereoChunk)
forall a b. (a -> b) -> a -> b
$
       (SampleRate (Exp Real) -> Exp Real -> Exp Real)
-> Exp Real
-> (Exp Real
    -> SampleRate (Exp Real)
    -> T (T (T VectorSize Real),
          ((T Real, T (ParameterPacked (T VectorSize Real))),
           ((T Real, T (ParameterPacked (T VectorSize Real))),
            (T Real, T (T Real)))))
         (T (T (T VectorSize Real))))
-> SampleRate (Exp Real)
-> T (T (T VectorSize Real),
      ((T Real, T (ParameterPacked (T VectorSize Real))),
       ((T Real, T (ParameterPacked (T VectorSize Real))),
        (T Real, T (T Real)))))
     (T (T (T VectorSize Real)))
forall a b c d.
(SampleRate a -> b -> c)
-> b -> (c -> SampleRate a -> d) -> SampleRate a -> d
constant SampleRate (Exp Real) -> Exp Real -> Exp Real
forall a. C a => SampleRate a -> a -> a
frequency Exp Real
10 ((Exp Real
  -> SampleRate (Exp Real)
  -> T (T (T VectorSize Real),
        ((T Real, T (ParameterPacked (T VectorSize Real))),
         ((T Real, T (ParameterPacked (T VectorSize Real))),
          (T Real, T (T Real)))))
       (T (T (T VectorSize Real))))
 -> SampleRate (Exp Real)
 -> T (T (T VectorSize Real),
       ((T Real, T (ParameterPacked (T VectorSize Real))),
        ((T Real, T (ParameterPacked (T VectorSize Real))),
         (T Real, T (T Real)))))
      (T (T (T VectorSize Real))))
-> (Exp Real
    -> SampleRate (Exp Real)
    -> T (T (T VectorSize Real),
          ((T Real, T (ParameterPacked (T VectorSize Real))),
           ((T Real, T (ParameterPacked (T VectorSize Real))),
            (T Real, T (T Real)))))
         (T (T (T VectorSize Real))))
-> SampleRate (Exp Real)
-> T (T (T VectorSize Real),
      ((T Real, T (ParameterPacked (T VectorSize Real))),
       ((T Real, T (ParameterPacked (T VectorSize Real))),
        (T Real, T (T Real)))))
     (T (T (T VectorSize Real)))
forall a b. (a -> b) -> a -> b
$ \Exp Real
speed SampleRate (Exp Real)
_sr ->
         ((T (T (T VectorSize Real)) -> T (T (T VectorSize Real)))
-> T (T (T (T VectorSize Real))) (T (T (T VectorSize Real)))
forall b c. (b -> c) -> T b c
forall (a :: * -> * -> *) b c. Arrow a => (b -> c) -> a b c
arr T (T (T VectorSize Real)) -> T (T (T VectorSize Real))
forall a. T (T a) -> T (T a)
Stereo.multiValue
          T (T (T (T VectorSize Real))) (T (T (T VectorSize Real)))
-> T (T (T VectorSize Real),
      ((T Real, T (ParameterPacked (T VectorSize Real))),
       ((T Real, T (ParameterPacked (T VectorSize Real))),
        (T Real, T (T Real)))))
     (T (T (T VectorSize Real)))
-> T (T (T VectorSize Real),
      ((T Real, T (ParameterPacked (T VectorSize Real))),
       ((T Real, T (ParameterPacked (T VectorSize Real))),
        (T Real, T (T Real)))))
     (T (T (T VectorSize Real)))
forall b c a. T b c -> T a b -> T a c
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
.
          T (T (T VectorSize Real), T (T (T VectorSize Real)))
  (T (T (T VectorSize Real)))
forall a. PseudoRing a => T (a, T a) (T a)
Causal.envelopeStereo
          T (T (T VectorSize Real), T (T (T VectorSize Real)))
  (T (T (T VectorSize Real)))
-> T (T (T VectorSize Real),
      ((T Real, T (ParameterPacked (T VectorSize Real))),
       ((T Real, T (ParameterPacked (T VectorSize Real))),
        (T Real, T (T Real)))))
     (T (T VectorSize Real), T (T (T VectorSize Real)))
-> T (T (T VectorSize Real),
      ((T Real, T (ParameterPacked (T VectorSize Real))),
       ((T Real, T (ParameterPacked (T VectorSize Real))),
        (T Real, T (T Real)))))
     (T (T (T VectorSize Real)))
forall b c a. T b c -> T a b -> T a c
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
.
          T ((T Real, T (ParameterPacked (T VectorSize Real))),
   ((T Real, T (ParameterPacked (T VectorSize Real))),
    (T Real, T (T Real))))
  (T (T (T VectorSize Real)))
-> T (T (T VectorSize Real),
      ((T Real, T (ParameterPacked (T VectorSize Real))),
       ((T Real, T (ParameterPacked (T VectorSize Real))),
        (T Real, T (T Real)))))
     (T (T VectorSize Real), T (T (T VectorSize Real)))
forall b c d. T b c -> T (d, b) (d, c)
forall (a :: * -> * -> *) b c d.
Arrow a =>
a b c -> a (d, b) (d, c)
second
             ((Arguments
   (T ((T Real, T (ParameterPacked (T VectorSize Real))),
       ((T Real, T (ParameterPacked (T VectorSize Real))),
        (T Real, T (T Real)))))
   ((T Real, T (ParameterPacked (T VectorSize Real))),
    ((T Real, T (ParameterPacked (T VectorSize Real))),
     (T Real, T (T Real))))
 -> T ((T Real, T (ParameterPacked (T VectorSize Real))),
       ((T Real, T (ParameterPacked (T VectorSize Real))),
        (T Real, T (T Real))))
      (T (T (T VectorSize Real))))
-> T ((T Real, T (ParameterPacked (T VectorSize Real))),
      ((T Real, T (ParameterPacked (T VectorSize Real))),
       (T Real, T (T Real))))
     (T (T (T VectorSize Real)))
forall inp out.
MakeArguments inp =>
(Arguments (T inp) inp -> T inp out) -> T inp out
F.withArgs ((Arguments
    (T ((T Real, T (ParameterPacked (T VectorSize Real))),
        ((T Real, T (ParameterPacked (T VectorSize Real))),
         (T Real, T (T Real)))))
    ((T Real, T (ParameterPacked (T VectorSize Real))),
     ((T Real, T (ParameterPacked (T VectorSize Real))),
      (T Real, T (T Real))))
  -> T ((T Real, T (ParameterPacked (T VectorSize Real))),
        ((T Real, T (ParameterPacked (T VectorSize Real))),
         (T Real, T (T Real))))
       (T (T (T VectorSize Real))))
 -> T ((T Real, T (ParameterPacked (T VectorSize Real))),
       ((T Real, T (ParameterPacked (T VectorSize Real))),
        (T Real, T (T Real))))
      (T (T (T VectorSize Real))))
-> (Arguments
      (T ((T Real, T (ParameterPacked (T VectorSize Real))),
          ((T Real, T (ParameterPacked (T VectorSize Real))),
           (T Real, T (T Real)))))
      ((T Real, T (ParameterPacked (T VectorSize Real))),
       ((T Real, T (ParameterPacked (T VectorSize Real))),
        (T Real, T (T Real))))
    -> T ((T Real, T (ParameterPacked (T VectorSize Real))),
          ((T Real, T (ParameterPacked (T VectorSize Real))),
           (T Real, T (T Real))))
         (T (T (T VectorSize Real))))
-> T ((T Real, T (ParameterPacked (T VectorSize Real))),
      ((T Real, T (ParameterPacked (T VectorSize Real))),
       (T Real, T (T Real))))
     (T (T (T VectorSize Real)))
forall a b. (a -> b) -> a -> b
$ \((T ((T Real, T (ParameterPacked (T VectorSize Real))),
   ((T Real, T (ParameterPacked (T VectorSize Real))),
    (T Real, T (T Real))))
  (T Real)
shape0,T ((T Real, T (ParameterPacked (T VectorSize Real))),
   ((T Real, T (ParameterPacked (T VectorSize Real))),
    (T Real, T (T Real))))
  (T (ParameterPacked (T VectorSize Real)))
shapeDecay),((T ((T Real, T (ParameterPacked (T VectorSize Real))),
   ((T Real, T (ParameterPacked (T VectorSize Real))),
    (T Real, T (T Real))))
  (T Real)
phase,T ((T Real, T (ParameterPacked (T VectorSize Real))),
   ((T Real, T (ParameterPacked (T VectorSize Real))),
    (T Real, T (T Real))))
  (T (ParameterPacked (T VectorSize Real)))
phaseDecay),(T ((T Real, T (ParameterPacked (T VectorSize Real))),
    ((T Real, T (ParameterPacked (T VectorSize Real))),
     (T Real, T (T Real))))
   (T Real),
 T ((T Real, T (ParameterPacked (T VectorSize Real))),
    ((T Real, T (ParameterPacked (T VectorSize Real))),
     (T Real, T (T Real))))
   (T (T Real)))
fm)) ->
              let shape :: T ((T Real, T (ParameterPacked (T VectorSize Real))),
   ((T Real, T (ParameterPacked (T VectorSize Real))),
    (T Real, T (T Real))))
  (T (T VectorSize Real))
shape = (Exp Real -> Exp (T VectorSize Real))
-> T (T Real) (T (T VectorSize Real))
forall ae a be b.
(Aggregate ae a, Aggregate be b) =>
(ae -> be) -> T a b
Causal.map Exp Real -> Exp (T VectorSize Real)
forall n a. (Positive n, C a) => Exp a -> Exp (T n a)
Serial.upsample T (T Real) (T (T VectorSize Real))
-> T ((T Real, T (ParameterPacked (T VectorSize Real))),
      ((T Real, T (ParameterPacked (T VectorSize Real))),
       (T Real, T (T Real))))
     (T Real)
-> T ((T Real, T (ParameterPacked (T VectorSize Real))),
      ((T Real, T (ParameterPacked (T VectorSize Real))),
       (T Real, T (T Real))))
     (T (T VectorSize Real))
forall b c a. T b c -> T a b -> T a c
$& T ((T Real, T (ParameterPacked (T VectorSize Real))),
   ((T Real, T (ParameterPacked (T VectorSize Real))),
    (T Real, T (T Real))))
  (T Real)
shape0
                  shapeCtrl :: T ((T Real, T (ParameterPacked (T VectorSize Real))),
   ((T Real, T (ParameterPacked (T VectorSize Real))),
    (T Real, T (T Real))))
  (T (T VectorSize Real))
shapeCtrl =
                     T ((T Real, T (ParameterPacked (T VectorSize Real))),
   ((T Real, T (ParameterPacked (T VectorSize Real))),
    (T Real, T (T Real))))
  (T (T VectorSize Real))
1T ((T Real, T (ParameterPacked (T VectorSize Real))),
   ((T Real, T (ParameterPacked (T VectorSize Real))),
    (T Real, T (T Real))))
  (T (T VectorSize Real))
-> T ((T Real, T (ParameterPacked (T VectorSize Real))),
      ((T Real, T (ParameterPacked (T VectorSize Real))),
       (T Real, T (T Real))))
     (T (T VectorSize Real))
-> T ((T Real, T (ParameterPacked (T VectorSize Real))),
      ((T Real, T (ParameterPacked (T VectorSize Real))),
       (T Real, T (T Real))))
     (T (T VectorSize Real))
forall a. C a => a -> a -> a
/T ((T Real, T (ParameterPacked (T VectorSize Real))),
   ((T Real, T (ParameterPacked (T VectorSize Real))),
    (T Real, T (T Real))))
  (T (T VectorSize Real))
forall a. C a => a
pi T ((T Real, T (ParameterPacked (T VectorSize Real))),
   ((T Real, T (ParameterPacked (T VectorSize Real))),
    (T Real, T (T Real))))
  (T (T VectorSize Real))
-> T ((T Real, T (ParameterPacked (T VectorSize Real))),
      ((T Real, T (ParameterPacked (T VectorSize Real))),
       (T Real, T (T Real))))
     (T (T VectorSize Real))
-> T ((T Real, T (ParameterPacked (T VectorSize Real))),
      ((T Real, T (ParameterPacked (T VectorSize Real))),
       (T Real, T (T Real))))
     (T (T VectorSize Real))
forall a. C a => a -> a -> a
+ (T ((T Real, T (ParameterPacked (T VectorSize Real))),
   ((T Real, T (ParameterPacked (T VectorSize Real))),
    (T Real, T (T Real))))
  (T (T VectorSize Real))
shapeT ((T Real, T (ParameterPacked (T VectorSize Real))),
   ((T Real, T (ParameterPacked (T VectorSize Real))),
    (T Real, T (T Real))))
  (T (T VectorSize Real))
-> T ((T Real, T (ParameterPacked (T VectorSize Real))),
      ((T Real, T (ParameterPacked (T VectorSize Real))),
       (T Real, T (T Real))))
     (T (T VectorSize Real))
-> T ((T Real, T (ParameterPacked (T VectorSize Real))),
      ((T Real, T (ParameterPacked (T VectorSize Real))),
       (T Real, T (T Real))))
     (T (T VectorSize Real))
forall a. C a => a -> a -> a
-T ((T Real, T (ParameterPacked (T VectorSize Real))),
   ((T Real, T (ParameterPacked (T VectorSize Real))),
    (T Real, T (T Real))))
  (T (T VectorSize Real))
1T ((T Real, T (ParameterPacked (T VectorSize Real))),
   ((T Real, T (ParameterPacked (T VectorSize Real))),
    (T Real, T (T Real))))
  (T (T VectorSize Real))
-> T ((T Real, T (ParameterPacked (T VectorSize Real))),
      ((T Real, T (ParameterPacked (T VectorSize Real))),
       (T Real, T (T Real))))
     (T (T VectorSize Real))
-> T ((T Real, T (ParameterPacked (T VectorSize Real))),
      ((T Real, T (ParameterPacked (T VectorSize Real))),
       (T Real, T (T Real))))
     (T (T VectorSize Real))
forall a. C a => a -> a -> a
/T ((T Real, T (ParameterPacked (T VectorSize Real))),
   ((T Real, T (ParameterPacked (T VectorSize Real))),
    (T Real, T (T Real))))
  (T (T VectorSize Real))
forall a. C a => a
pi) T ((T Real, T (ParameterPacked (T VectorSize Real))),
   ((T Real, T (ParameterPacked (T VectorSize Real))),
    (T Real, T (T Real))))
  (T (T VectorSize Real))
-> T ((T Real, T (ParameterPacked (T VectorSize Real))),
      ((T Real, T (ParameterPacked (T VectorSize Real))),
       (T Real, T (T Real))))
     (T (T VectorSize Real))
-> T ((T Real, T (ParameterPacked (T VectorSize Real))),
      ((T Real, T (ParameterPacked (T VectorSize Real))),
       (T Real, T (T Real))))
     (T (T VectorSize Real))
forall a. C a => a -> a -> a
*
                        (Exp Real
-> T (ParameterPacked (T (T VectorSize Real)))
     (T (T VectorSize Real))
forall a n.
(PseudoRing a, IntegerConstant a, Positive n, Vector n a, C a) =>
Exp a -> T (ParameterPacked (Value n a)) (Value n a)
Exp.causalPacked Exp Real
1
                              T (ParameterPacked (T (T VectorSize Real))) (T (T VectorSize Real))
-> (T (ParameterPacked (T VectorSize Real))
    -> ParameterPacked (T (T VectorSize Real)))
-> T (T (ParameterPacked (T VectorSize Real)))
     (T (T VectorSize Real))
forall (a :: * -> * -> *) c d b.
Arrow a =>
a c d -> (b -> c) -> a b d
<<^ T (ParameterPacked (T VectorSize Real))
-> ParameterPacked (T (T VectorSize Real))
forall a. T (ParameterPacked a) -> ParameterPacked (T a)
Exp.unMultiValueParameterPacked
                           T (T (ParameterPacked (T VectorSize Real))) (T (T VectorSize Real))
-> T ((T Real, T (ParameterPacked (T VectorSize Real))),
      ((T Real, T (ParameterPacked (T VectorSize Real))),
       (T Real, T (T Real))))
     (T (ParameterPacked (T VectorSize Real)))
-> T ((T Real, T (ParameterPacked (T VectorSize Real))),
      ((T Real, T (ParameterPacked (T VectorSize Real))),
       (T Real, T (T Real))))
     (T (T VectorSize Real))
forall b c a. T b c -> T a b -> T a c
$& T ((T Real, T (ParameterPacked (T VectorSize Real))),
   ((T Real, T (ParameterPacked (T VectorSize Real))),
    (T Real, T (T Real))))
  (T (ParameterPacked (T VectorSize Real)))
shapeDecay)
                  freqs :: T ((T Real, T (ParameterPacked (T VectorSize Real))),
   ((T Real, T (ParameterPacked (T VectorSize Real))),
    (T Real, T (T Real))))
  (T (T (T VectorSize Real)))
freqs = Exp Real
-> (T ((T Real, T (ParameterPacked (T VectorSize Real))),
       ((T Real, T (ParameterPacked (T VectorSize Real))),
        (T Real, T (T Real))))
      (T Real),
    T ((T Real, T (ParameterPacked (T VectorSize Real))),
       ((T Real, T (ParameterPacked (T VectorSize Real))),
        (T Real, T (T Real))))
      (T (T Real)))
-> T ((T Real, T (ParameterPacked (T VectorSize Real))),
      ((T Real, T (ParameterPacked (T VectorSize Real))),
       (T Real, T (T Real))))
     (T (T (T VectorSize Real)))
forall inp.
Exp Real
-> (T inp (T Real), T inp (T (T Real)))
-> T inp (T (T (T VectorSize Real)))
stereoFrequenciesFromDetuneBendModulation Exp Real
speed (T ((T Real, T (ParameterPacked (T VectorSize Real))),
    ((T Real, T (ParameterPacked (T VectorSize Real))),
     (T Real, T (T Real))))
   (T Real),
 T ((T Real, T (ParameterPacked (T VectorSize Real))),
    ((T Real, T (ParameterPacked (T VectorSize Real))),
     (T Real, T (T Real))))
   (T (T Real)))
fm
                  expo :: T ((T Real, T (ParameterPacked (T VectorSize Real))),
   ((T Real, T (ParameterPacked (T VectorSize Real))),
    (T Real, T (T Real))))
  (T (T VectorSize Real))
expo =
                     ((Exp Real -> Exp (T VectorSize Real))
-> T (T Real) (T (T VectorSize Real))
forall ae a be b.
(Aggregate ae a, Aggregate be b) =>
(ae -> be) -> T a b
Causal.map Exp Real -> Exp (T VectorSize Real)
forall n a. (Positive n, C a) => Exp a -> Exp (T n a)
Serial.upsample T (T Real) (T (T VectorSize Real))
-> T ((T Real, T (ParameterPacked (T VectorSize Real))),
      ((T Real, T (ParameterPacked (T VectorSize Real))),
       (T Real, T (T Real))))
     (T Real)
-> T ((T Real, T (ParameterPacked (T VectorSize Real))),
      ((T Real, T (ParameterPacked (T VectorSize Real))),
       (T Real, T (T Real))))
     (T (T VectorSize Real))
forall b c a. T b c -> T a b -> T a c
$& T ((T Real, T (ParameterPacked (T VectorSize Real))),
   ((T Real, T (ParameterPacked (T VectorSize Real))),
    (T Real, T (T Real))))
  (T Real)
phase) T ((T Real, T (ParameterPacked (T VectorSize Real))),
   ((T Real, T (ParameterPacked (T VectorSize Real))),
    (T Real, T (T Real))))
  (T (T VectorSize Real))
-> T ((T Real, T (ParameterPacked (T VectorSize Real))),
      ((T Real, T (ParameterPacked (T VectorSize Real))),
       (T Real, T (T Real))))
     (T (T VectorSize Real))
-> T ((T Real, T (ParameterPacked (T VectorSize Real))),
      ((T Real, T (ParameterPacked (T VectorSize Real))),
       (T Real, T (T Real))))
     (T (T VectorSize Real))
forall a. C a => a -> a -> a
*
                     (Exp Real
-> T (ParameterPacked (T (T VectorSize Real)))
     (T (T VectorSize Real))
forall a n.
(PseudoRing a, IntegerConstant a, Positive n, Vector n a, C a) =>
Exp a -> T (ParameterPacked (Value n a)) (Value n a)
Exp.causalPacked Exp Real
1 T (ParameterPacked (T (T VectorSize Real))) (T (T VectorSize Real))
-> (T (ParameterPacked (T VectorSize Real))
    -> ParameterPacked (T (T VectorSize Real)))
-> T (T (ParameterPacked (T VectorSize Real)))
     (T (T VectorSize Real))
forall (a :: * -> * -> *) c d b.
Arrow a =>
a c d -> (b -> c) -> a b d
<<^ T (ParameterPacked (T VectorSize Real))
-> ParameterPacked (T (T VectorSize Real))
forall a. T (ParameterPacked a) -> ParameterPacked (T a)
Exp.unMultiValueParameterPacked
                        T (T (ParameterPacked (T VectorSize Real))) (T (T VectorSize Real))
-> T ((T Real, T (ParameterPacked (T VectorSize Real))),
      ((T Real, T (ParameterPacked (T VectorSize Real))),
       (T Real, T (T Real))))
     (T (ParameterPacked (T VectorSize Real)))
-> T ((T Real, T (ParameterPacked (T VectorSize Real))),
      ((T Real, T (ParameterPacked (T VectorSize Real))),
       (T Real, T (T Real))))
     (T (T VectorSize Real))
forall b c a. T b c -> T a b -> T a c
$& T ((T Real, T (ParameterPacked (T VectorSize Real))),
   ((T Real, T (ParameterPacked (T VectorSize Real))),
    (T Real, T (T Real))))
  (T (ParameterPacked (T VectorSize Real)))
phaseDecay)
                  osci ::
                     Causal.T
                        (VectorValue, (VectorValue, VectorValue)) VectorValue
                  osci :: T (T (T VectorSize Real),
   (T (T VectorSize Real), T (T VectorSize Real)))
  (T (T VectorSize Real))
osci = (forall r.
 T (T VectorSize Real)
 -> T (T VectorSize Real)
 -> CodeGenFunction r (T (T VectorSize Real)))
-> T (T (T VectorSize Real),
      (T (T VectorSize Real), T (T VectorSize Real)))
     (T (T VectorSize Real))
forall n t c y.
(Positive n, C t, Fraction t) =>
(forall r. c -> Serial n t -> CodeGenFunction r y)
-> T (c, (Serial n t, Serial n t)) y
CausalPS.shapeModOsci T (T VectorSize Real)
-> T (T VectorSize Real)
-> CodeGenFunction r (T (T VectorSize Real))
forall r.
T (T VectorSize Real)
-> T (T VectorSize Real)
-> CodeGenFunction r (T (T VectorSize Real))
forall a r.
(Field a, RationalConstant a, Real a) =>
a -> a -> CodeGenFunction r a
WaveL.rationalApproxSine1
              in  (T (T VectorSize Real)
 -> T (T VectorSize Real) -> T (T (T VectorSize Real)))
-> T ((T Real, T (ParameterPacked (T VectorSize Real))),
      ((T Real, T (ParameterPacked (T VectorSize Real))),
       (T Real, T (T Real))))
     (T (T VectorSize Real))
-> T ((T Real, T (ParameterPacked (T VectorSize Real))),
      ((T Real, T (ParameterPacked (T VectorSize Real))),
       (T Real, T (T Real))))
     (T (T VectorSize Real))
-> T ((T Real, T (ParameterPacked (T VectorSize Real))),
      ((T Real, T (ParameterPacked (T VectorSize Real))),
       (T Real, T (T Real))))
     (T (T (T VectorSize Real)))
forall a b c.
(a -> b -> c)
-> T ((T Real, T (ParameterPacked (T VectorSize Real))),
      ((T Real, T (ParameterPacked (T VectorSize Real))),
       (T Real, T (T Real))))
     a
-> T ((T Real, T (ParameterPacked (T VectorSize Real))),
      ((T Real, T (ParameterPacked (T VectorSize Real))),
       (T Real, T (T Real))))
     b
-> T ((T Real, T (ParameterPacked (T VectorSize Real))),
      ((T Real, T (ParameterPacked (T VectorSize Real))),
       (T Real, T (T Real))))
     c
forall (f :: * -> *) a b c.
Applicative f =>
(a -> b -> c) -> f a -> f b -> f c
liftA2 T (T VectorSize Real)
-> T (T VectorSize Real) -> T (T (T VectorSize Real))
forall a. a -> a -> T a
Stereo.cons
                     (T (T (T VectorSize Real),
   (T (T VectorSize Real), T (T VectorSize Real)))
  (T (T VectorSize Real))
osci T (T (T VectorSize Real),
   (T (T VectorSize Real), T (T VectorSize Real)))
  (T (T VectorSize Real))
-> T ((T Real, T (ParameterPacked (T VectorSize Real))),
      ((T Real, T (ParameterPacked (T VectorSize Real))),
       (T Real, T (T Real))))
     (T (T VectorSize Real),
      (T (T VectorSize Real), T (T VectorSize Real)))
-> T ((T Real, T (ParameterPacked (T VectorSize Real))),
      ((T Real, T (ParameterPacked (T VectorSize Real))),
       (T Real, T (T Real))))
     (T (T VectorSize Real))
forall b c a. T b c -> T a b -> T a c
$&  T ((T Real, T (ParameterPacked (T VectorSize Real))),
   ((T Real, T (ParameterPacked (T VectorSize Real))),
    (T Real, T (T Real))))
  (T (T VectorSize Real))
shapeCtrl T ((T Real, T (ParameterPacked (T VectorSize Real))),
   ((T Real, T (ParameterPacked (T VectorSize Real))),
    (T Real, T (T Real))))
  (T (T VectorSize Real))
-> T ((T Real, T (ParameterPacked (T VectorSize Real))),
      ((T Real, T (ParameterPacked (T VectorSize Real))),
       (T Real, T (T Real))))
     (T (T VectorSize Real), T (T VectorSize Real))
-> T ((T Real, T (ParameterPacked (T VectorSize Real))),
      ((T Real, T (ParameterPacked (T VectorSize Real))),
       (T Real, T (T Real))))
     (T (T VectorSize Real),
      (T (T VectorSize Real), T (T VectorSize Real)))
forall a b c. T a b -> T a c -> T a (b, c)
&|& (T ((T Real, T (ParameterPacked (T VectorSize Real))),
   ((T Real, T (ParameterPacked (T VectorSize Real))),
    (T Real, T (T Real))))
  (T (T VectorSize Real))
expo T ((T Real, T (ParameterPacked (T VectorSize Real))),
   ((T Real, T (ParameterPacked (T VectorSize Real))),
    (T Real, T (T Real))))
  (T (T VectorSize Real))
-> T ((T Real, T (ParameterPacked (T VectorSize Real))),
      ((T Real, T (ParameterPacked (T VectorSize Real))),
       (T Real, T (T Real))))
     (T (T VectorSize Real))
-> T ((T Real, T (ParameterPacked (T VectorSize Real))),
      ((T Real, T (ParameterPacked (T VectorSize Real))),
       (T Real, T (T Real))))
     (T (T VectorSize Real), T (T VectorSize Real))
forall a b c. T a b -> T a c -> T a (b, c)
&|& (T (T (T VectorSize Real)) -> T (T VectorSize Real))
-> T ((T Real, T (ParameterPacked (T VectorSize Real))),
      ((T Real, T (ParameterPacked (T VectorSize Real))),
       (T Real, T (T Real))))
     (T (T (T VectorSize Real)))
-> T ((T Real, T (ParameterPacked (T VectorSize Real))),
      ((T Real, T (ParameterPacked (T VectorSize Real))),
       (T Real, T (T Real))))
     (T (T VectorSize Real))
forall a b.
(a -> b)
-> T ((T Real, T (ParameterPacked (T VectorSize Real))),
      ((T Real, T (ParameterPacked (T VectorSize Real))),
       (T Real, T (T Real))))
     a
-> T ((T Real, T (ParameterPacked (T VectorSize Real))),
      ((T Real, T (ParameterPacked (T VectorSize Real))),
       (T Real, T (T Real))))
     b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap T (T (T VectorSize Real)) -> T (T VectorSize Real)
forall a. T a -> a
Stereo.left T ((T Real, T (ParameterPacked (T VectorSize Real))),
   ((T Real, T (ParameterPacked (T VectorSize Real))),
    (T Real, T (T Real))))
  (T (T (T VectorSize Real)))
freqs))
                     (T (T (T VectorSize Real),
   (T (T VectorSize Real), T (T VectorSize Real)))
  (T (T VectorSize Real))
osci T (T (T VectorSize Real),
   (T (T VectorSize Real), T (T VectorSize Real)))
  (T (T VectorSize Real))
-> T ((T Real, T (ParameterPacked (T VectorSize Real))),
      ((T Real, T (ParameterPacked (T VectorSize Real))),
       (T Real, T (T Real))))
     (T (T VectorSize Real),
      (T (T VectorSize Real), T (T VectorSize Real)))
-> T ((T Real, T (ParameterPacked (T VectorSize Real))),
      ((T Real, T (ParameterPacked (T VectorSize Real))),
       (T Real, T (T Real))))
     (T (T VectorSize Real))
forall b c a. T b c -> T a b -> T a c
$&  T ((T Real, T (ParameterPacked (T VectorSize Real))),
   ((T Real, T (ParameterPacked (T VectorSize Real))),
    (T Real, T (T Real))))
  (T (T VectorSize Real))
shapeCtrl T ((T Real, T (ParameterPacked (T VectorSize Real))),
   ((T Real, T (ParameterPacked (T VectorSize Real))),
    (T Real, T (T Real))))
  (T (T VectorSize Real))
-> T ((T Real, T (ParameterPacked (T VectorSize Real))),
      ((T Real, T (ParameterPacked (T VectorSize Real))),
       (T Real, T (T Real))))
     (T (T VectorSize Real), T (T VectorSize Real))
-> T ((T Real, T (ParameterPacked (T VectorSize Real))),
      ((T Real, T (ParameterPacked (T VectorSize Real))),
       (T Real, T (T Real))))
     (T (T VectorSize Real),
      (T (T VectorSize Real), T (T VectorSize Real)))
forall a b c. T a b -> T a c -> T a (b, c)
&|&
                                 (T ((T Real, T (ParameterPacked (T VectorSize Real))),
   ((T Real, T (ParameterPacked (T VectorSize Real))),
    (T Real, T (T Real))))
  (T (T VectorSize Real))
-> T ((T Real, T (ParameterPacked (T VectorSize Real))),
      ((T Real, T (ParameterPacked (T VectorSize Real))),
       (T Real, T (T Real))))
     (T (T VectorSize Real))
forall a. C a => a -> a
negate T ((T Real, T (ParameterPacked (T VectorSize Real))),
   ((T Real, T (ParameterPacked (T VectorSize Real))),
    (T Real, T (T Real))))
  (T (T VectorSize Real))
expo T ((T Real, T (ParameterPacked (T VectorSize Real))),
   ((T Real, T (ParameterPacked (T VectorSize Real))),
    (T Real, T (T Real))))
  (T (T VectorSize Real))
-> T ((T Real, T (ParameterPacked (T VectorSize Real))),
      ((T Real, T (ParameterPacked (T VectorSize Real))),
       (T Real, T (T Real))))
     (T (T VectorSize Real))
-> T ((T Real, T (ParameterPacked (T VectorSize Real))),
      ((T Real, T (ParameterPacked (T VectorSize Real))),
       (T Real, T (T Real))))
     (T (T VectorSize Real), T (T VectorSize Real))
forall a b c. T a b -> T a c -> T a (b, c)
&|& (T (T (T VectorSize Real)) -> T (T VectorSize Real))
-> T ((T Real, T (ParameterPacked (T VectorSize Real))),
      ((T Real, T (ParameterPacked (T VectorSize Real))),
       (T Real, T (T Real))))
     (T (T (T VectorSize Real)))
-> T ((T Real, T (ParameterPacked (T VectorSize Real))),
      ((T Real, T (ParameterPacked (T VectorSize Real))),
       (T Real, T (T Real))))
     (T (T VectorSize Real))
forall a b.
(a -> b)
-> T ((T Real, T (ParameterPacked (T VectorSize Real))),
      ((T Real, T (ParameterPacked (T VectorSize Real))),
       (T Real, T (T Real))))
     a
-> T ((T Real, T (ParameterPacked (T VectorSize Real))),
      ((T Real, T (ParameterPacked (T VectorSize Real))),
       (T Real, T (T Real))))
     b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap T (T (T VectorSize Real)) -> T (T VectorSize Real)
forall a. T a -> a
Stereo.right T ((T Real, T (ParameterPacked (T VectorSize Real))),
   ((T Real, T (ParameterPacked (T VectorSize Real))),
    (T Real, T (T Real))))
  (T (T (T VectorSize Real)))
freqs)))))
      (Maybe Real
-> IO (SampleRate Real -> Real -> T EnvelopeControl Chunk)
pingControlledEnvelope (Real -> Maybe Real
forall a. a -> Maybe a
Just Real
0.01))



filterSawStereoFM ::
   IO (SampleRate Real -> Real -> Real ->
       PIO.T
          (WithEnvelopeControl
             (Zip.T
                (Zip.T (Control Frequency) (Control Time))
                DetuneBendModControl))
          StereoChunk)
filterSawStereoFM :: IO
  (SampleRate Real
   -> Real
   -> Real
   -> T (WithEnvelopeControl
           (T (T (Control Frequency) (Control Time)) DetuneBendModControl))
        StereoChunk)
filterSawStereoFM =
   ((SampleRate Real
  -> T (T Chunk
          (T (T (Control Real)
                (T ShortStrictTime (ParameterPacked (T VectorSize Real))))
             DetuneBendModControl))
       StereoChunk)
 -> (SampleRate Real -> Real -> T EnvelopeControl Chunk)
 -> SampleRate Real
 -> Real
 -> Real
 -> T (WithEnvelopeControl
         (T (T (Control Frequency) (Control Time)) DetuneBendModControl))
      StereoChunk)
-> IO
     (SampleRate Real
      -> T (T Chunk
              (T (T (Control Real)
                    (T ShortStrictTime (ParameterPacked (T VectorSize Real))))
                 DetuneBendModControl))
           StereoChunk)
-> IO (SampleRate Real -> Real -> T EnvelopeControl Chunk)
-> IO
     (SampleRate Real
      -> Real
      -> Real
      -> T (WithEnvelopeControl
              (T (T (Control Frequency) (Control Time)) DetuneBendModControl))
           StereoChunk)
forall a b c. (a -> b -> c) -> IO a -> IO b -> IO c
forall (f :: * -> *) a b c.
Applicative f =>
(a -> b -> c) -> f a -> f b -> f c
liftA2
      (\SampleRate Real
-> T (T Chunk
        (T (T (Control Real)
              (T ShortStrictTime (ParameterPacked (T VectorSize Real))))
           DetuneBendModControl))
     StereoChunk
osc SampleRate Real -> Real -> T EnvelopeControl Chunk
env SampleRate Real
sr Real
vel Real
freq ->
         SampleRate Real
-> T (T Chunk
        (T (T (Control Real)
              (T ShortStrictTime (ParameterPacked (T VectorSize Real))))
           DetuneBendModControl))
     StereoChunk
osc SampleRate Real
sr
         T (T Chunk
     (T (T (Control Real)
           (T ShortStrictTime (ParameterPacked (T VectorSize Real))))
        DetuneBendModControl))
  StereoChunk
-> T (WithEnvelopeControl
        (T (T (Control Frequency) (Control Time)) DetuneBendModControl))
     (T Chunk
        (T (T (Control Real)
              (T ShortStrictTime (ParameterPacked (T VectorSize Real))))
           DetuneBendModControl))
-> T (WithEnvelopeControl
        (T (T (Control Frequency) (Control Time)) DetuneBendModControl))
     StereoChunk
forall b c a. T b c -> T a b -> T a c
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
.
         T (T (T (Control Frequency) (Control Time)) DetuneBendModControl)
  (T (T (Control Real)
        (T ShortStrictTime (ParameterPacked (T VectorSize Real))))
     DetuneBendModControl)
-> T (T Chunk
        (T (T (Control Frequency) (Control Time)) DetuneBendModControl))
     (T Chunk
        (T (T (Control Real)
              (T ShortStrictTime (ParameterPacked (T VectorSize Real))))
           DetuneBendModControl))
forall (arrow :: * -> * -> *) a b c.
Arrow arrow =>
arrow a b -> arrow (T c a) (T c b)
Zip.arrowSecond
            (T (T (Control Frequency) (Control Time))
  (T (Control Real)
     (T ShortStrictTime (ParameterPacked (T VectorSize Real))))
-> T DetuneBendModControl DetuneBendModControl
-> T (T (T (Control Frequency) (Control Time))
        DetuneBendModControl)
     (T (T (Control Real)
           (T ShortStrictTime (ParameterPacked (T VectorSize Real))))
        DetuneBendModControl)
forall (arrow :: * -> * -> *) a c b d.
Arrow arrow =>
arrow a c -> arrow b d -> arrow (T a b) (T c d)
Zip.arrowSplit
               (T (Control Frequency) (Control Real)
-> T (Control Time)
     (T ShortStrictTime (ParameterPacked (T VectorSize Real)))
-> T (T (Control Frequency) (Control Time))
     (T (Control Real)
        (T ShortStrictTime (ParameterPacked (T VectorSize Real))))
forall (arrow :: * -> * -> *) a c b d.
Arrow arrow =>
arrow a c -> arrow b d -> arrow (T a b) (T c d)
Zip.arrowSplit
                  ((Control Frequency -> Control Real)
-> T (Control Frequency) (Control Real)
forall b c. (b -> c) -> T b c
forall (a :: * -> * -> *) b c. Arrow a => (b -> c) -> a b c
arr ((Control Frequency -> Control Real)
 -> T (Control Frequency) (Control Real))
-> (Control Frequency -> Control Real)
-> T (Control Frequency) (Control Real)
forall a b. (a -> b) -> a -> b
$ SampleRate Real -> Control Frequency -> Control Real
forall (f :: * -> *).
Functor f =>
SampleRate Real -> f Frequency -> f Real
frequencyControl SampleRate Real
sr)
                  ((Control Time
 -> T ShortStrictTime (ParameterPacked (T VectorSize Real)))
-> T (Control Time)
     (T ShortStrictTime (ParameterPacked (T VectorSize Real)))
forall b c. (b -> c) -> T b c
forall (a :: * -> * -> *) b c. Arrow a => (b -> c) -> a b c
arr ((Control Time
  -> T ShortStrictTime (ParameterPacked (T VectorSize Real)))
 -> T (Control Time)
      (T ShortStrictTime (ParameterPacked (T VectorSize Real))))
-> (Control Time
    -> T ShortStrictTime (ParameterPacked (T VectorSize Real)))
-> T (Control Time)
     (T ShortStrictTime (ParameterPacked (T VectorSize Real)))
forall a b. (a -> b) -> a -> b
$ SampleRate Real
-> Control Time
-> T ShortStrictTime (ParameterPacked (T VectorSize Real))
forall (f :: * -> *).
Functor f =>
SampleRate Real
-> f Time -> f (ParameterPacked (T VectorSize Real))
halfLifeControl SampleRate Real
sr))
               (T (T ShortStrictTime (T Real)) (T ShortStrictTime (T Real))
-> T DetuneBendModControl DetuneBendModControl
forall (arrow :: * -> * -> *) a b c.
Arrow arrow =>
arrow a b -> arrow (T c a) (T c b)
Zip.arrowSecond (T (T ShortStrictTime (T Real)) (T ShortStrictTime (T Real))
 -> T DetuneBendModControl DetuneBendModControl)
-> T (T ShortStrictTime (T Real)) (T ShortStrictTime (T Real))
-> T DetuneBendModControl DetuneBendModControl
forall a b. (a -> b) -> a -> b
$
                  (T ShortStrictTime (T Real) -> T ShortStrictTime (T Real))
-> T (T ShortStrictTime (T Real)) (T ShortStrictTime (T Real))
forall b c. (b -> c) -> T b c
forall (a :: * -> * -> *) b c. Arrow a => (b -> c) -> a b c
arr ((T ShortStrictTime (T Real) -> T ShortStrictTime (T Real))
 -> T (T ShortStrictTime (T Real)) (T ShortStrictTime (T Real)))
-> (T ShortStrictTime (T Real) -> T ShortStrictTime (T Real))
-> T (T ShortStrictTime (T Real)) (T ShortStrictTime (T Real))
forall a b. (a -> b) -> a -> b
$ SampleRate Real
-> Real -> T ShortStrictTime (T Real) -> T ShortStrictTime (T Real)
forall (stream :: * -> *).
Functor stream =>
SampleRate Real -> Real -> stream (T Real) -> stream (T Real)
transposeModulation SampleRate Real
sr Real
freq))
         T (T Chunk
     (T (T (Control Frequency) (Control Time)) DetuneBendModControl))
  (T Chunk
     (T (T (Control Real)
           (T ShortStrictTime (ParameterPacked (T VectorSize Real))))
        DetuneBendModControl))
-> T (WithEnvelopeControl
        (T (T (Control Frequency) (Control Time)) DetuneBendModControl))
     (T Chunk
        (T (T (Control Frequency) (Control Time)) DetuneBendModControl))
-> T (WithEnvelopeControl
        (T (T (Control Frequency) (Control Time)) DetuneBendModControl))
     (T Chunk
        (T (T (Control Real)
              (T ShortStrictTime (ParameterPacked (T VectorSize Real))))
           DetuneBendModControl))
forall b c a. T b c -> T a b -> T a c
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
.
         T EnvelopeControl Chunk
-> T (WithEnvelopeControl
        (T (T (Control Frequency) (Control Time)) DetuneBendModControl))
     (T Chunk
        (T (T (Control Frequency) (Control Time)) DetuneBendModControl))
forall (arrow :: * -> * -> *) a b.
(Arrow arrow, Transform a, Transform b) =>
arrow EnvelopeControl a -> arrow (WithEnvelopeControl b) (T a b)
zipEnvelope (SampleRate Real -> Real -> T EnvelopeControl Chunk
env SampleRate Real
sr Real
vel))
      (DSL
  (SampleRate Real
   -> T (T Chunk
           (T (T (Control Real)
                 (T ShortStrictTime (ParameterPacked (T VectorSize Real))))
              DetuneBendModControl))
        StereoChunk)
  (Element
     (In
        (SampleRate Real
         -> T (T Chunk
                 (T (T (Control Real)
                       (T ShortStrictTime (ParameterPacked (T VectorSize Real))))
                    DetuneBendModControl))
              StereoChunk)))
  (Element
     (Out
        (SampleRate Real
         -> T (T Chunk
                 (T (T (Control Real)
                       (T ShortStrictTime (ParameterPacked (T VectorSize Real))))
                    DetuneBendModControl))
              StereoChunk)))
-> IO
     (SampleRate Real
      -> T (T Chunk
              (T (T (Control Real)
                    (T ShortStrictTime (ParameterPacked (T VectorSize Real))))
                 DetuneBendModControl))
           StereoChunk)
forall f a al b bl.
(Run f, In f ~ a, Default a, Element a ~ al, Out f ~ b, Default b,
 Element b ~ bl) =>
DSL f al bl -> IO f
CausalRender.run (DSL
   (SampleRate Real
    -> T (T Chunk
            (T (T (Control Real)
                  (T ShortStrictTime (ParameterPacked (T VectorSize Real))))
               DetuneBendModControl))
         StereoChunk)
   (Element
      (In
         (SampleRate Real
          -> T (T Chunk
                  (T (T (Control Real)
                        (T ShortStrictTime (ParameterPacked (T VectorSize Real))))
                     DetuneBendModControl))
               StereoChunk)))
   (Element
      (Out
         (SampleRate Real
          -> T (T Chunk
                  (T (T (Control Real)
                        (T ShortStrictTime (ParameterPacked (T VectorSize Real))))
                     DetuneBendModControl))
               StereoChunk)))
 -> IO
      (SampleRate Real
       -> T (T Chunk
               (T (T (Control Real)
                     (T ShortStrictTime (ParameterPacked (T VectorSize Real))))
                  DetuneBendModControl))
            StereoChunk))
-> DSL
     (SampleRate Real
      -> T (T Chunk
              (T (T (Control Real)
                    (T ShortStrictTime (ParameterPacked (T VectorSize Real))))
                 DetuneBendModControl))
           StereoChunk)
     (Element
        (In
           (SampleRate Real
            -> T (T Chunk
                    (T (T (Control Real)
                          (T ShortStrictTime (ParameterPacked (T VectorSize Real))))
                       DetuneBendModControl))
                 StereoChunk)))
     (Element
        (Out
           (SampleRate Real
            -> T (T Chunk
                    (T (T (Control Real)
                          (T ShortStrictTime (ParameterPacked (T VectorSize Real))))
                       DetuneBendModControl))
                 StereoChunk)))
-> IO
     (SampleRate Real
      -> T (T Chunk
              (T (T (Control Real)
                    (T ShortStrictTime (ParameterPacked (T VectorSize Real))))
                 DetuneBendModControl))
           StereoChunk)
forall a b. (a -> b) -> a -> b
$
       (SampleRate (Exp Real) -> Exp Real -> Exp Real)
-> Exp Real
-> (Exp Real
    -> SampleRate (Exp Real)
    -> T (T (T VectorSize Real),
          ((T Real, T (ParameterPacked (T VectorSize Real))),
           (T Real, T (T Real))))
         (T (T (T VectorSize Real))))
-> SampleRate (Exp Real)
-> T (T (T VectorSize Real),
      ((T Real, T (ParameterPacked (T VectorSize Real))),
       (T Real, T (T Real))))
     (T (T (T VectorSize Real)))
forall a b c d.
(SampleRate a -> b -> c)
-> b -> (c -> SampleRate a -> d) -> SampleRate a -> d
constant SampleRate (Exp Real) -> Exp Real -> Exp Real
forall a. C a => SampleRate a -> a -> a
frequency Exp Real
10 ((Exp Real
  -> SampleRate (Exp Real)
  -> T (T (T VectorSize Real),
        ((T Real, T (ParameterPacked (T VectorSize Real))),
         (T Real, T (T Real))))
       (T (T (T VectorSize Real))))
 -> SampleRate (Exp Real)
 -> T (T (T VectorSize Real),
       ((T Real, T (ParameterPacked (T VectorSize Real))),
        (T Real, T (T Real))))
      (T (T (T VectorSize Real))))
-> (Exp Real
    -> SampleRate (Exp Real)
    -> T (T (T VectorSize Real),
          ((T Real, T (ParameterPacked (T VectorSize Real))),
           (T Real, T (T Real))))
         (T (T (T VectorSize Real))))
-> SampleRate (Exp Real)
-> T (T (T VectorSize Real),
      ((T Real, T (ParameterPacked (T VectorSize Real))),
       (T Real, T (T Real))))
     (T (T (T VectorSize Real)))
forall a b. (a -> b) -> a -> b
$ \Exp Real
speed ->
       (SampleRate (Exp Real) -> Exp Real -> Exp Real)
-> Exp Real
-> (Exp Real
    -> SampleRate (Exp Real)
    -> T (T (T VectorSize Real),
          ((T Real, T (ParameterPacked (T VectorSize Real))),
           (T Real, T (T Real))))
         (T (T (T VectorSize Real))))
-> SampleRate (Exp Real)
-> T (T (T VectorSize Real),
      ((T Real, T (ParameterPacked (T VectorSize Real))),
       (T Real, T (T Real))))
     (T (T (T VectorSize Real)))
forall a b c d.
(SampleRate a -> b -> c)
-> b -> (c -> SampleRate a -> d) -> SampleRate a -> d
constant SampleRate (Exp Real) -> Exp Real -> Exp Real
forall a. C a => SampleRate a -> a -> a
frequency Exp Real
100 ((Exp Real
  -> SampleRate (Exp Real)
  -> T (T (T VectorSize Real),
        ((T Real, T (ParameterPacked (T VectorSize Real))),
         (T Real, T (T Real))))
       (T (T (T VectorSize Real))))
 -> SampleRate (Exp Real)
 -> T (T (T VectorSize Real),
       ((T Real, T (ParameterPacked (T VectorSize Real))),
        (T Real, T (T Real))))
      (T (T (T VectorSize Real))))
-> (Exp Real
    -> SampleRate (Exp Real)
    -> T (T (T VectorSize Real),
          ((T Real, T (ParameterPacked (T VectorSize Real))),
           (T Real, T (T Real))))
         (T (T (T VectorSize Real))))
-> SampleRate (Exp Real)
-> T (T (T VectorSize Real),
      ((T Real, T (ParameterPacked (T VectorSize Real))),
       (T Real, T (T Real))))
     (T (T (T VectorSize Real)))
forall a b. (a -> b) -> a -> b
$ \Exp Real
lowerFreq SampleRate (Exp Real)
_sr ->
         ((T (T (T VectorSize Real)) -> T (T (T VectorSize Real)))
-> T (T (T (T VectorSize Real))) (T (T (T VectorSize Real)))
forall b c. (b -> c) -> T b c
forall (a :: * -> * -> *) b c. Arrow a => (b -> c) -> a b c
arr T (T (T VectorSize Real)) -> T (T (T VectorSize Real))
forall a. T (T a) -> T (T a)
Stereo.multiValue
          T (T (T (T VectorSize Real))) (T (T (T VectorSize Real)))
-> T (T (T VectorSize Real),
      ((T Real, T (ParameterPacked (T VectorSize Real))),
       (T Real, T (T Real))))
     (T (T (T VectorSize Real)))
-> T (T (T VectorSize Real),
      ((T Real, T (ParameterPacked (T VectorSize Real))),
       (T Real, T (T Real))))
     (T (T (T VectorSize Real)))
forall b c a. T b c -> T a b -> T a c
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
.
          T (T (T VectorSize Real), T (T (T VectorSize Real)))
  (T (T (T VectorSize Real)))
forall a. PseudoRing a => T (a, T a) (T a)
Causal.envelopeStereo
          T (T (T VectorSize Real), T (T (T VectorSize Real)))
  (T (T (T VectorSize Real)))
-> T (T (T VectorSize Real),
      ((T Real, T (ParameterPacked (T VectorSize Real))),
       (T Real, T (T Real))))
     (T (T VectorSize Real), T (T (T VectorSize Real)))
-> T (T (T VectorSize Real),
      ((T Real, T (ParameterPacked (T VectorSize Real))),
       (T Real, T (T Real))))
     (T (T (T VectorSize Real)))
forall b c a. T b c -> T a b -> T a c
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
.
          T ((T Real, T (ParameterPacked (T VectorSize Real))),
   (T Real, T (T Real)))
  (T (T (T VectorSize Real)))
-> T (T (T VectorSize Real),
      ((T Real, T (ParameterPacked (T VectorSize Real))),
       (T Real, T (T Real))))
     (T (T VectorSize Real), T (T (T VectorSize Real)))
forall b c d. T b c -> T (d, b) (d, c)
forall (a :: * -> * -> *) b c d.
Arrow a =>
a b c -> a (d, b) (d, c)
second
             ((Arguments
   (T ((T Real, T (ParameterPacked (T VectorSize Real))),
       (T Real, T (T Real))))
   ((T Real, T (ParameterPacked (T VectorSize Real))),
    (T Real, T (T Real)))
 -> T ((T Real, T (ParameterPacked (T VectorSize Real))),
       (T Real, T (T Real)))
      (T (T (T VectorSize Real))))
-> T ((T Real, T (ParameterPacked (T VectorSize Real))),
      (T Real, T (T Real)))
     (T (T (T VectorSize Real)))
forall inp out.
MakeArguments inp =>
(Arguments (T inp) inp -> T inp out) -> T inp out
F.withArgs ((Arguments
    (T ((T Real, T (ParameterPacked (T VectorSize Real))),
        (T Real, T (T Real))))
    ((T Real, T (ParameterPacked (T VectorSize Real))),
     (T Real, T (T Real)))
  -> T ((T Real, T (ParameterPacked (T VectorSize Real))),
        (T Real, T (T Real)))
       (T (T (T VectorSize Real))))
 -> T ((T Real, T (ParameterPacked (T VectorSize Real))),
       (T Real, T (T Real)))
      (T (T (T VectorSize Real))))
-> (Arguments
      (T ((T Real, T (ParameterPacked (T VectorSize Real))),
          (T Real, T (T Real))))
      ((T Real, T (ParameterPacked (T VectorSize Real))),
       (T Real, T (T Real)))
    -> T ((T Real, T (ParameterPacked (T VectorSize Real))),
          (T Real, T (T Real)))
         (T (T (T VectorSize Real))))
-> T ((T Real, T (ParameterPacked (T VectorSize Real))),
      (T Real, T (T Real)))
     (T (T (T VectorSize Real)))
forall a b. (a -> b) -> a -> b
$ \((T ((T Real, T (ParameterPacked (T VectorSize Real))),
   (T Real, T (T Real)))
  (T Real)
cutoff,T ((T Real, T (ParameterPacked (T VectorSize Real))),
   (T Real, T (T Real)))
  (T (ParameterPacked (T VectorSize Real)))
cutoffDecay),(T ((T Real, T (ParameterPacked (T VectorSize Real))),
    (T Real, T (T Real)))
   (T Real),
 T ((T Real, T (ParameterPacked (T VectorSize Real))),
    (T Real, T (T Real)))
   (T (T Real)))
fm) ->
              let freqs :: T ((T Real, T (ParameterPacked (T VectorSize Real))),
   (T Real, T (T Real)))
  (T (T (T VectorSize Real)))
freqs = Exp Real
-> (T ((T Real, T (ParameterPacked (T VectorSize Real))),
       (T Real, T (T Real)))
      (T Real),
    T ((T Real, T (ParameterPacked (T VectorSize Real))),
       (T Real, T (T Real)))
      (T (T Real)))
-> T ((T Real, T (ParameterPacked (T VectorSize Real))),
      (T Real, T (T Real)))
     (T (T (T VectorSize Real)))
forall inp.
Exp Real
-> (T inp (T Real), T inp (T (T Real)))
-> T inp (T (T (T VectorSize Real)))
stereoFrequenciesFromDetuneBendModulation Exp Real
speed (T ((T Real, T (ParameterPacked (T VectorSize Real))),
    (T Real, T (T Real)))
   (T Real),
 T ((T Real, T (ParameterPacked (T VectorSize Real))),
    (T Real, T (T Real)))
   (T (T Real)))
fm
                  {- bound control in order to avoid too low resonant frequency,
                     which makes the filter instable -}
                  expo :: T ((T Real, T (ParameterPacked (T VectorSize Real))),
   (T Real, T (T Real)))
  (T (T VectorSize Real))
expo =
                     Exp Real -> T (T (T VectorSize Real)) (T (T VectorSize Real))
takeThreshold Exp Real
lowerFreq T (T (T VectorSize Real)) (T (T VectorSize Real))
-> T ((T Real, T (ParameterPacked (T VectorSize Real))),
      (T Real, T (T Real)))
     (T (T VectorSize Real))
-> T ((T Real, T (ParameterPacked (T VectorSize Real))),
      (T Real, T (T Real)))
     (T (T VectorSize Real))
forall b c a. T b c -> T a b -> T a c
$&
                     ((Exp Real -> Exp (T VectorSize Real))
-> T (T Real) (T (T VectorSize Real))
forall ae a be b.
(Aggregate ae a, Aggregate be b) =>
(ae -> be) -> T a b
Causal.map Exp Real -> Exp (T VectorSize Real)
forall n a. (Positive n, C a) => Exp a -> Exp (T n a)
Serial.upsample T (T Real) (T (T VectorSize Real))
-> T ((T Real, T (ParameterPacked (T VectorSize Real))),
      (T Real, T (T Real)))
     (T Real)
-> T ((T Real, T (ParameterPacked (T VectorSize Real))),
      (T Real, T (T Real)))
     (T (T VectorSize Real))
forall b c a. T b c -> T a b -> T a c
$& T ((T Real, T (ParameterPacked (T VectorSize Real))),
   (T Real, T (T Real)))
  (T Real)
cutoff) T ((T Real, T (ParameterPacked (T VectorSize Real))),
   (T Real, T (T Real)))
  (T (T VectorSize Real))
-> T ((T Real, T (ParameterPacked (T VectorSize Real))),
      (T Real, T (T Real)))
     (T (T VectorSize Real))
-> T ((T Real, T (ParameterPacked (T VectorSize Real))),
      (T Real, T (T Real)))
     (T (T VectorSize Real))
forall a. C a => a -> a -> a
*
                     (Exp Real
-> T (ParameterPacked (T (T VectorSize Real)))
     (T (T VectorSize Real))
forall a n.
(PseudoRing a, IntegerConstant a, Positive n, Vector n a, C a) =>
Exp a -> T (ParameterPacked (Value n a)) (Value n a)
Exp.causalPacked Exp Real
1 T (ParameterPacked (T (T VectorSize Real))) (T (T VectorSize Real))
-> (T (ParameterPacked (T VectorSize Real))
    -> ParameterPacked (T (T VectorSize Real)))
-> T (T (ParameterPacked (T VectorSize Real)))
     (T (T VectorSize Real))
forall (a :: * -> * -> *) c d b.
Arrow a =>
a c d -> (b -> c) -> a b d
<<^ T (ParameterPacked (T VectorSize Real))
-> ParameterPacked (T (T VectorSize Real))
forall a. T (ParameterPacked a) -> ParameterPacked (T a)
Exp.unMultiValueParameterPacked
                        T (T (ParameterPacked (T VectorSize Real))) (T (T VectorSize Real))
-> T ((T Real, T (ParameterPacked (T VectorSize Real))),
      (T Real, T (T Real)))
     (T (ParameterPacked (T VectorSize Real)))
-> T ((T Real, T (ParameterPacked (T VectorSize Real))),
      (T Real, T (T Real)))
     (T (T VectorSize Real))
forall b c a. T b c -> T a b -> T a c
$& T ((T Real, T (ParameterPacked (T VectorSize Real))),
   (T Real, T (T Real)))
  (T (ParameterPacked (T VectorSize Real)))
cutoffDecay)
              in  T (Parameter (T Real), T (T VectorSize Real))
  (T (T VectorSize Real))
-> T (Parameter (T Real), T (T (T VectorSize Real)))
     (T (T (T VectorSize Real)))
forall a b c.
(Phi a, Phi b, Phi c, Undefined a, Undefined b, Undefined c) =>
T (c, a) b -> T (c, T a) (T b)
Causal.stereoFromMonoControlled
                     (Result (T (T VectorSize Real)) -> T (T VectorSize Real)
forall a. Result a -> a
UniFilter.lowpass (Result (T (T VectorSize Real)) -> T (T VectorSize Real))
-> T (Parameter (T Real), T (T VectorSize Real))
     (Result (T (T VectorSize Real)))
-> T (Parameter (T Real), T (T VectorSize Real))
     (T (T VectorSize Real))
forall (a :: * -> * -> *) c d b.
Arrow a =>
(c -> d) -> a b c -> a b d
^<< T (Parameter (T Real), T (T VectorSize Real))
  (Result (T (T VectorSize Real)))
forall parameter a b. C parameter a b => T (parameter, a) b
CtrlPS.process)
                  T (Parameter (T Real), T (T (T VectorSize Real)))
  (T (T (T VectorSize Real)))
-> T ((T Real, T (ParameterPacked (T VectorSize Real))),
      (T Real, T (T Real)))
     (Parameter (T Real), T (T (T VectorSize Real)))
-> T ((T Real, T (ParameterPacked (T VectorSize Real))),
      (T Real, T (T Real)))
     (T (T (T VectorSize Real)))
forall b c a. T b c -> T a b -> T a c
$&
                  ((T (T (T VectorSize Real)) (Parameter (T Real))
-> T (T Real, T (T VectorSize Real)) (Parameter (T Real))
forall b c a.
(C b, C c, IntegerConstant c, Additive c, Comparison c) =>
T a b -> T (T c, a) b
Causal.quantizeLift
                     ((Exp (T VectorSize Real) -> Parameter (Exp Real))
-> T (T (T VectorSize Real)) (Parameter (T Real))
forall ae a be b.
(Aggregate ae a, Aggregate be b) =>
(ae -> be) -> T a b
Causal.map
                          (Exp Real -> Exp Real -> Parameter (Exp Real)
forall a. C a => a -> a -> Parameter a
UniFilter.parameter Exp Real
10
                           (Exp Real -> Parameter (Exp Real))
-> (Exp (T VectorSize Real) -> Exp Real)
-> Exp (T VectorSize Real)
-> Parameter (Exp Real)
forall b c a. (b -> c) -> (a -> b) -> a -> c
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
.
                           Exp (T VectorSize Real) -> Exp Real
forall n a. (Positive n, C a) => Exp (T n a) -> Exp a
Serial.subsample))
                     T (T Real, T (T VectorSize Real)) (Parameter (T Real))
-> Real -> T (T (T VectorSize Real)) (Parameter (T Real))
forall (process :: * -> * -> *) a b c.
(C process, C a) =>
process (T a, b) c -> a -> process b c
$<# (Real
100 Real -> Real -> Real
forall a. C a => a -> a -> a
/ Int -> Real
forall a b. (C a, C b) => a -> b
fromIntegral Int
vectorSize :: Real))
                   T (T (T VectorSize Real)) (Parameter (T Real))
-> T ((T Real, T (ParameterPacked (T VectorSize Real))),
      (T Real, T (T Real)))
     (T (T VectorSize Real))
-> T ((T Real, T (ParameterPacked (T VectorSize Real))),
      (T Real, T (T Real)))
     (Parameter (T Real))
forall b c a. T b c -> T a b -> T a c
$&
                   T ((T Real, T (ParameterPacked (T VectorSize Real))),
   (T Real, T (T Real)))
  (T (T VectorSize Real))
expo)
                  T ((T Real, T (ParameterPacked (T VectorSize Real))),
   (T Real, T (T Real)))
  (Parameter (T Real))
-> T ((T Real, T (ParameterPacked (T VectorSize Real))),
      (T Real, T (T Real)))
     (T (T (T VectorSize Real)))
-> T ((T Real, T (ParameterPacked (T VectorSize Real))),
      (T Real, T (T Real)))
     (Parameter (T Real), T (T (T VectorSize Real)))
forall a b c. T a b -> T a c -> T a (b, c)
&|&
                  (T (T (T VectorSize Real)) (T (T VectorSize Real))
-> T (T (T (T VectorSize Real))) (T (T (T VectorSize Real)))
forall a b.
(Phi a, Undefined a, Phi b, Undefined b) =>
T a b -> T (T a) (T b)
Causal.stereoFromMono
                     ((forall r.
 T (T VectorSize Real) -> CodeGenFunction r (T (T VectorSize Real)))
-> T (T (T VectorSize Real), T (T VectorSize Real))
     (T (T VectorSize Real))
forall n t y.
(Positive n, C t, Fraction t) =>
(forall r. Serial n t -> CodeGenFunction r y)
-> T (Serial n t, Serial n t) y
CausalPS.osci T (T VectorSize Real) -> CodeGenFunction r (T (T VectorSize Real))
forall r.
T (T VectorSize Real) -> CodeGenFunction r (T (T VectorSize Real))
forall a r.
(PseudoRing a, IntegerConstant a) =>
a -> CodeGenFunction r a
WaveL.saw T (T (T VectorSize Real), T (T VectorSize Real))
  (T (T VectorSize Real))
-> SignalOf T (T (T VectorSize Real))
-> T (T (T VectorSize Real)) (T (T VectorSize Real))
forall (process :: * -> * -> *) a b c.
C process =>
process (a, b) c -> SignalOf process a -> process b c
$< SignalOf T (T (T VectorSize Real))
T (T (T VectorSize Real))
forall a. C a => a
zero) T (T (T (T VectorSize Real))) (T (T (T VectorSize Real)))
-> T ((T Real, T (ParameterPacked (T VectorSize Real))),
      (T Real, T (T Real)))
     (T (T (T VectorSize Real)))
-> T ((T Real, T (ParameterPacked (T VectorSize Real))),
      (T Real, T (T Real)))
     (T (T (T VectorSize Real)))
forall b c a. T b c -> T a b -> T a c
$&
                     T ((T Real, T (ParameterPacked (T VectorSize Real))),
   (T Real, T (T Real)))
  (T (T (T VectorSize Real)))
freqs))))
      (Maybe Real
-> IO (SampleRate Real -> Real -> T EnvelopeControl Chunk)
pingControlledEnvelope (Real -> Maybe Real
forall a. a -> Maybe a
Just Real
0.01))

tineStereoFM ::
   IO (SampleRate Real -> Real -> Real ->
       PIO.T
          (WithEnvelopeControl
             (Zip.T
                (Zip.T (Control Real) (Control Real))
                DetuneBendModControl))
          StereoChunk)
tineStereoFM :: IO
  (SampleRate Real
   -> Real
   -> Real
   -> T (WithEnvelopeControl
           (T (T (Control Real) (Control Real)) DetuneBendModControl))
        StereoChunk)
tineStereoFM =
   ((SampleRate Real
  -> Real
  -> T (T Chunk
          (T (T (Control Real) (Control Real)) DetuneBendModControl))
       StereoChunk)
 -> (SampleRate Real -> Real -> T EnvelopeControl Chunk)
 -> SampleRate Real
 -> Real
 -> Real
 -> T (WithEnvelopeControl
         (T (T (Control Real) (Control Real)) DetuneBendModControl))
      StereoChunk)
-> IO
     (SampleRate Real
      -> Real
      -> T (T Chunk
              (T (T (Control Real) (Control Real)) DetuneBendModControl))
           StereoChunk)
-> IO (SampleRate Real -> Real -> T EnvelopeControl Chunk)
-> IO
     (SampleRate Real
      -> Real
      -> Real
      -> T (WithEnvelopeControl
              (T (T (Control Real) (Control Real)) DetuneBendModControl))
           StereoChunk)
forall a b c. (a -> b -> c) -> IO a -> IO b -> IO c
forall (f :: * -> *) a b c.
Applicative f =>
(a -> b -> c) -> f a -> f b -> f c
liftA2
      (\SampleRate Real
-> Real
-> T (T Chunk
        (T (T (Control Real) (Control Real)) DetuneBendModControl))
     StereoChunk
osc SampleRate Real -> Real -> T EnvelopeControl Chunk
env SampleRate Real
sr Real
vel Real
freq ->
         SampleRate Real
-> Real
-> T (T Chunk
        (T (T (Control Real) (Control Real)) DetuneBendModControl))
     StereoChunk
osc SampleRate Real
sr Real
vel
         T (T Chunk
     (T (T (Control Real) (Control Real)) DetuneBendModControl))
  StereoChunk
-> T (WithEnvelopeControl
        (T (T (Control Real) (Control Real)) DetuneBendModControl))
     (T Chunk
        (T (T (Control Real) (Control Real)) DetuneBendModControl))
-> T (WithEnvelopeControl
        (T (T (Control Real) (Control Real)) DetuneBendModControl))
     StereoChunk
forall b c a. T b c -> T a b -> T a c
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
.
         (T (T (T (Control Real) (Control Real)) DetuneBendModControl)
  (T (T (Control Real) (Control Real)) DetuneBendModControl)
-> T (T Chunk
        (T (T (Control Real) (Control Real)) DetuneBendModControl))
     (T Chunk
        (T (T (Control Real) (Control Real)) DetuneBendModControl))
forall (arrow :: * -> * -> *) a b c.
Arrow arrow =>
arrow a b -> arrow (T c a) (T c b)
Zip.arrowSecond (T (T (T (Control Real) (Control Real)) DetuneBendModControl)
   (T (T (Control Real) (Control Real)) DetuneBendModControl)
 -> T (T Chunk
         (T (T (Control Real) (Control Real)) DetuneBendModControl))
      (T Chunk
         (T (T (Control Real) (Control Real)) DetuneBendModControl)))
-> T (T (T (Control Real) (Control Real)) DetuneBendModControl)
     (T (T (Control Real) (Control Real)) DetuneBendModControl)
-> T (T Chunk
        (T (T (Control Real) (Control Real)) DetuneBendModControl))
     (T Chunk
        (T (T (Control Real) (Control Real)) DetuneBendModControl))
forall a b. (a -> b) -> a -> b
$ T DetuneBendModControl DetuneBendModControl
-> T (T (T (Control Real) (Control Real)) DetuneBendModControl)
     (T (T (Control Real) (Control Real)) DetuneBendModControl)
forall (arrow :: * -> * -> *) a b c.
Arrow arrow =>
arrow a b -> arrow (T c a) (T c b)
Zip.arrowSecond (T DetuneBendModControl DetuneBendModControl
 -> T (T (T (Control Real) (Control Real)) DetuneBendModControl)
      (T (T (Control Real) (Control Real)) DetuneBendModControl))
-> T DetuneBendModControl DetuneBendModControl
-> T (T (T (Control Real) (Control Real)) DetuneBendModControl)
     (T (T (Control Real) (Control Real)) DetuneBendModControl)
forall a b. (a -> b) -> a -> b
$
          T (T ShortStrictTime (T Real)) (T ShortStrictTime (T Real))
-> T DetuneBendModControl DetuneBendModControl
forall (arrow :: * -> * -> *) a b c.
Arrow arrow =>
arrow a b -> arrow (T c a) (T c b)
Zip.arrowSecond (T (T ShortStrictTime (T Real)) (T ShortStrictTime (T Real))
 -> T DetuneBendModControl DetuneBendModControl)
-> T (T ShortStrictTime (T Real)) (T ShortStrictTime (T Real))
-> T DetuneBendModControl DetuneBendModControl
forall a b. (a -> b) -> a -> b
$
            (T ShortStrictTime (T Real) -> T ShortStrictTime (T Real))
-> T (T ShortStrictTime (T Real)) (T ShortStrictTime (T Real))
forall b c. (b -> c) -> T b c
forall (a :: * -> * -> *) b c. Arrow a => (b -> c) -> a b c
arr ((T ShortStrictTime (T Real) -> T ShortStrictTime (T Real))
 -> T (T ShortStrictTime (T Real)) (T ShortStrictTime (T Real)))
-> (T ShortStrictTime (T Real) -> T ShortStrictTime (T Real))
-> T (T ShortStrictTime (T Real)) (T ShortStrictTime (T Real))
forall a b. (a -> b) -> a -> b
$ SampleRate Real
-> Real -> T ShortStrictTime (T Real) -> T ShortStrictTime (T Real)
forall (stream :: * -> *).
Functor stream =>
SampleRate Real -> Real -> stream (T Real) -> stream (T Real)
transposeModulation SampleRate Real
sr Real
freq)
         T (T Chunk
     (T (T (Control Real) (Control Real)) DetuneBendModControl))
  (T Chunk
     (T (T (Control Real) (Control Real)) DetuneBendModControl))
-> T (WithEnvelopeControl
        (T (T (Control Real) (Control Real)) DetuneBendModControl))
     (T Chunk
        (T (T (Control Real) (Control Real)) DetuneBendModControl))
-> T (WithEnvelopeControl
        (T (T (Control Real) (Control Real)) DetuneBendModControl))
     (T Chunk
        (T (T (Control Real) (Control Real)) DetuneBendModControl))
forall b c a. T b c -> T a b -> T a c
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
.
         T EnvelopeControl Chunk
-> T (WithEnvelopeControl
        (T (T (Control Real) (Control Real)) DetuneBendModControl))
     (T Chunk
        (T (T (Control Real) (Control Real)) DetuneBendModControl))
forall (arrow :: * -> * -> *) a b.
(Arrow arrow, Transform a, Transform b) =>
arrow EnvelopeControl a -> arrow (WithEnvelopeControl b) (T a b)
zipEnvelope (SampleRate Real -> Real -> T EnvelopeControl Chunk
env SampleRate Real
sr Real
vel))
      (DSL
  (SampleRate Real
   -> Real
   -> T (T Chunk
           (T (T (Control Real) (Control Real)) DetuneBendModControl))
        StereoChunk)
  (Element
     (In
        (SampleRate Real
         -> Real
         -> T (T Chunk
                 (T (T (Control Real) (Control Real)) DetuneBendModControl))
              StereoChunk)))
  (Element
     (Out
        (SampleRate Real
         -> Real
         -> T (T Chunk
                 (T (T (Control Real) (Control Real)) DetuneBendModControl))
              StereoChunk)))
-> IO
     (SampleRate Real
      -> Real
      -> T (T Chunk
              (T (T (Control Real) (Control Real)) DetuneBendModControl))
           StereoChunk)
forall f a al b bl.
(Run f, In f ~ a, Default a, Element a ~ al, Out f ~ b, Default b,
 Element b ~ bl) =>
DSL f al bl -> IO f
CausalRender.run (DSL
   (SampleRate Real
    -> Real
    -> T (T Chunk
            (T (T (Control Real) (Control Real)) DetuneBendModControl))
         StereoChunk)
   (Element
      (In
         (SampleRate Real
          -> Real
          -> T (T Chunk
                  (T (T (Control Real) (Control Real)) DetuneBendModControl))
               StereoChunk)))
   (Element
      (Out
         (SampleRate Real
          -> Real
          -> T (T Chunk
                  (T (T (Control Real) (Control Real)) DetuneBendModControl))
               StereoChunk)))
 -> IO
      (SampleRate Real
       -> Real
       -> T (T Chunk
               (T (T (Control Real) (Control Real)) DetuneBendModControl))
            StereoChunk))
-> DSL
     (SampleRate Real
      -> Real
      -> T (T Chunk
              (T (T (Control Real) (Control Real)) DetuneBendModControl))
           StereoChunk)
     (Element
        (In
           (SampleRate Real
            -> Real
            -> T (T Chunk
                    (T (T (Control Real) (Control Real)) DetuneBendModControl))
                 StereoChunk)))
     (Element
        (Out
           (SampleRate Real
            -> Real
            -> T (T Chunk
                    (T (T (Control Real) (Control Real)) DetuneBendModControl))
                 StereoChunk)))
-> IO
     (SampleRate Real
      -> Real
      -> T (T Chunk
              (T (T (Control Real) (Control Real)) DetuneBendModControl))
           StereoChunk)
forall a b. (a -> b) -> a -> b
$
       (Arg Number (Exp Real)
 -> SampleRate (Exp Real)
 -> T (T (T VectorSize Real),
       ((T Real, T Real), (T Real, T (T Real))))
      (T (T (T VectorSize Real))))
-> SampleRate (Exp Real)
-> Unwrapped
     (Arg Number (Exp Real)
      -> SampleRate (Exp Real)
      -> T (T (T VectorSize Real),
            ((T Real, T Real), (T Real, T (T Real))))
           (T (T (T VectorSize Real))))
forall a f. Wrapped a f => f -> SampleRate a -> Unwrapped f
wrapped ((Arg Number (Exp Real)
  -> SampleRate (Exp Real)
  -> T (T (T VectorSize Real),
        ((T Real, T Real), (T Real, T (T Real))))
       (T (T (T VectorSize Real))))
 -> SampleRate (Exp Real)
 -> Unwrapped
      (Arg Number (Exp Real)
       -> SampleRate (Exp Real)
       -> T (T (T VectorSize Real),
             ((T Real, T Real), (T Real, T (T Real))))
            (T (T (T VectorSize Real)))))
-> (Arg Number (Exp Real)
    -> SampleRate (Exp Real)
    -> T (T (T VectorSize Real),
          ((T Real, T Real), (T Real, T (T Real))))
         (T (T (T VectorSize Real))))
-> SampleRate (Exp Real)
-> Unwrapped
     (Arg Number (Exp Real)
      -> SampleRate (Exp Real)
      -> T (T (T VectorSize Real),
            ((T Real, T Real), (T Real, T (T Real))))
           (T (T (T VectorSize Real))))
forall a b. (a -> b) -> a -> b
$ \(Number Exp Real
vel) ->
       (SampleRate (Exp Real) -> Exp Real -> Exp Real)
-> Exp Real
-> (Exp Real
    -> SampleRate (Exp Real)
    -> T (T (T VectorSize Real),
          ((T Real, T Real), (T Real, T (T Real))))
         (T (T (T VectorSize Real))))
-> SampleRate (Exp Real)
-> T (T (T VectorSize Real),
      ((T Real, T Real), (T Real, T (T Real))))
     (T (T (T VectorSize Real)))
forall a b c d.
(SampleRate a -> b -> c)
-> b -> (c -> SampleRate a -> d) -> SampleRate a -> d
constant SampleRate (Exp Real) -> Exp Real -> Exp Real
forall a. C a => SampleRate a -> a -> a
frequency Exp Real
5 ((Exp Real
  -> SampleRate (Exp Real)
  -> T (T (T VectorSize Real),
        ((T Real, T Real), (T Real, T (T Real))))
       (T (T (T VectorSize Real))))
 -> SampleRate (Exp Real)
 -> T (T (T VectorSize Real),
       ((T Real, T Real), (T Real, T (T Real))))
      (T (T (T VectorSize Real))))
-> (Exp Real
    -> SampleRate (Exp Real)
    -> T (T (T VectorSize Real),
          ((T Real, T Real), (T Real, T (T Real))))
         (T (T (T VectorSize Real))))
-> SampleRate (Exp Real)
-> T (T (T VectorSize Real),
      ((T Real, T Real), (T Real, T (T Real))))
     (T (T (T VectorSize Real)))
forall a b. (a -> b) -> a -> b
$ \Exp Real
speed ->
       (SampleRate (Exp Real) -> Exp Real -> Exp Real)
-> Exp Real
-> (Exp Real
    -> SampleRate (Exp Real)
    -> T (T (T VectorSize Real),
          ((T Real, T Real), (T Real, T (T Real))))
         (T (T (T VectorSize Real))))
-> SampleRate (Exp Real)
-> T (T (T VectorSize Real),
      ((T Real, T Real), (T Real, T (T Real))))
     (T (T (T VectorSize Real)))
forall a b c d.
(SampleRate a -> b -> c)
-> b -> (c -> SampleRate a -> d) -> SampleRate a -> d
constant SampleRate (Exp Real) -> Exp Real -> Exp Real
forall a. C a => SampleRate a -> a -> a
time Exp Real
1 ((Exp Real
  -> SampleRate (Exp Real)
  -> T (T (T VectorSize Real),
        ((T Real, T Real), (T Real, T (T Real))))
       (T (T (T VectorSize Real))))
 -> SampleRate (Exp Real)
 -> T (T (T VectorSize Real),
       ((T Real, T Real), (T Real, T (T Real))))
      (T (T (T VectorSize Real))))
-> (Exp Real
    -> SampleRate (Exp Real)
    -> T (T (T VectorSize Real),
          ((T Real, T Real), (T Real, T (T Real))))
         (T (T (T VectorSize Real))))
-> SampleRate (Exp Real)
-> T (T (T VectorSize Real),
      ((T Real, T Real), (T Real, T (T Real))))
     (T (T (T VectorSize Real)))
forall a b. (a -> b) -> a -> b
$ \Exp Real
halfLife SampleRate (Exp Real)
_sr ->
         ((T (T (T VectorSize Real)) -> T (T (T VectorSize Real)))
-> T (T (T (T VectorSize Real))) (T (T (T VectorSize Real)))
forall b c. (b -> c) -> T b c
forall (a :: * -> * -> *) b c. Arrow a => (b -> c) -> a b c
arr T (T (T VectorSize Real)) -> T (T (T VectorSize Real))
forall a. T (T a) -> T (T a)
Stereo.multiValue
          T (T (T (T VectorSize Real))) (T (T (T VectorSize Real)))
-> T (T (T VectorSize Real),
      ((T Real, T Real), (T Real, T (T Real))))
     (T (T (T VectorSize Real)))
-> T (T (T VectorSize Real),
      ((T Real, T Real), (T Real, T (T Real))))
     (T (T (T VectorSize Real)))
forall b c a. T b c -> T a b -> T a c
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
.
          T (T (T VectorSize Real), T (T (T VectorSize Real)))
  (T (T (T VectorSize Real)))
forall a. PseudoRing a => T (a, T a) (T a)
Causal.envelopeStereo
          T (T (T VectorSize Real), T (T (T VectorSize Real)))
  (T (T (T VectorSize Real)))
-> T (T (T VectorSize Real),
      ((T Real, T Real), (T Real, T (T Real))))
     (T (T VectorSize Real), T (T (T VectorSize Real)))
-> T (T (T VectorSize Real),
      ((T Real, T Real), (T Real, T (T Real))))
     (T (T (T VectorSize Real)))
forall b c a. T b c -> T a b -> T a c
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
.
          T ((T Real, T Real), (T Real, T (T Real)))
  (T (T (T VectorSize Real)))
-> T (T (T VectorSize Real),
      ((T Real, T Real), (T Real, T (T Real))))
     (T (T VectorSize Real), T (T (T VectorSize Real)))
forall b c d. T b c -> T (d, b) (d, c)
forall (a :: * -> * -> *) b c d.
Arrow a =>
a b c -> a (d, b) (d, c)
second
             ((Arguments
   (T ((T Real, T Real), (T Real, T (T Real))))
   ((T Real, T Real), (T Real, T (T Real)))
 -> T ((T Real, T Real), (T Real, T (T Real)))
      (T (T (T VectorSize Real))))
-> T ((T Real, T Real), (T Real, T (T Real)))
     (T (T (T VectorSize Real)))
forall inp out.
MakeArguments inp =>
(Arguments (T inp) inp -> T inp out) -> T inp out
F.withArgs ((Arguments
    (T ((T Real, T Real), (T Real, T (T Real))))
    ((T Real, T Real), (T Real, T (T Real)))
  -> T ((T Real, T Real), (T Real, T (T Real)))
       (T (T (T VectorSize Real))))
 -> T ((T Real, T Real), (T Real, T (T Real)))
      (T (T (T VectorSize Real))))
-> (Arguments
      (T ((T Real, T Real), (T Real, T (T Real))))
      ((T Real, T Real), (T Real, T (T Real)))
    -> T ((T Real, T Real), (T Real, T (T Real)))
         (T (T (T VectorSize Real))))
-> T ((T Real, T Real), (T Real, T (T Real)))
     (T (T (T VectorSize Real)))
forall a b. (a -> b) -> a -> b
$ \((T ((T Real, T Real), (T Real, T (T Real))) (T Real)
index0,T ((T Real, T Real), (T Real, T (T Real))) (T Real)
depth0), (T ((T Real, T Real), (T Real, T (T Real))) (T Real),
 T ((T Real, T Real), (T Real, T (T Real))) (T (T Real)))
fm) ->
              let freqs :: T ((T Real, T Real), (T Real, T (T Real)))
  (T (T (T VectorSize Real)))
freqs = Exp Real
-> (T ((T Real, T Real), (T Real, T (T Real))) (T Real),
    T ((T Real, T Real), (T Real, T (T Real))) (T (T Real)))
-> T ((T Real, T Real), (T Real, T (T Real)))
     (T (T (T VectorSize Real)))
forall inp.
Exp Real
-> (T inp (T Real), T inp (T (T Real)))
-> T inp (T (T (T VectorSize Real)))
stereoFrequenciesFromDetuneBendModulation Exp Real
speed (T ((T Real, T Real), (T Real, T (T Real))) (T Real),
 T ((T Real, T Real), (T Real, T (T Real))) (T (T Real)))
fm
                  index :: T ((T Real, T Real), (T Real, T (T Real))) (T (T VectorSize Real))
index = (Exp Real -> Exp (T VectorSize Real))
-> T (T Real) (T (T VectorSize Real))
forall ae a be b.
(Aggregate ae a, Aggregate be b) =>
(ae -> be) -> T a b
Causal.map Exp Real -> Exp (T VectorSize Real)
forall n a. (Positive n, C a) => Exp a -> Exp (T n a)
Serial.upsample T (T Real) (T (T VectorSize Real))
-> T ((T Real, T Real), (T Real, T (T Real))) (T Real)
-> T ((T Real, T Real), (T Real, T (T Real)))
     (T (T VectorSize Real))
forall b c a. T b c -> T a b -> T a c
$& T ((T Real, T Real), (T Real, T (T Real))) (T Real)
index0
                  depth :: T ((T Real, T Real), (T Real, T (T Real))) (T (T VectorSize Real))
depth = (Exp Real -> Exp (T VectorSize Real))
-> T (T Real) (T (T VectorSize Real))
forall ae a be b.
(Aggregate ae a, Aggregate be b) =>
(ae -> be) -> T a b
Causal.map Exp Real -> Exp (T VectorSize Real)
forall n a. (Positive n, C a) => Exp a -> Exp (T n a)
Serial.upsample T (T Real) (T (T VectorSize Real))
-> T ((T Real, T Real), (T Real, T (T Real))) (T Real)
-> T ((T Real, T Real), (T Real, T (T Real)))
     (T (T VectorSize Real))
forall b c a. T b c -> T a b -> T a c
$& T ((T Real, T Real), (T Real, T (T Real))) (T Real)
depth0
                  expo :: T inp (T (T VectorSize Real))
expo = T (T (T VectorSize Real)) -> T inp (T (T VectorSize Real))
forall out inp. T out -> T inp out
F.fromSignal (T (T (T VectorSize Real)) -> T inp (T (T VectorSize Real)))
-> T (T (T VectorSize Real)) -> T inp (T (T VectorSize Real))
forall a b. (a -> b) -> a -> b
$ Exp Real -> Exp Real -> T (T (T VectorSize Real))
forall n a.
(Vector n a, Transcendental a, RationalConstant a) =>
Exp a -> Exp a -> T (Serial n a)
SigPS.exponential2 Exp Real
halfLife (Exp Real
1 Exp Real -> Exp Real -> Exp Real
forall a. C a => a -> a -> a
+ Exp Real
vel)
                  osci :: T a (T (T VectorSize Real), T (T VectorSize Real))
-> T a (T (T VectorSize Real)) -> T a (T (T VectorSize Real))
osci T a (T (T VectorSize Real), T (T VectorSize Real))
indexDepth T a (T (T VectorSize Real))
freq =
                     case T a (T (T VectorSize Real), T (T VectorSize Real))
-> (T a (T (T VectorSize Real)), T a (T (T VectorSize Real)))
forall (f :: * -> *) a b. Functor f => f (a, b) -> (f a, f b)
unzip T a (T (T VectorSize Real), T (T VectorSize Real))
indexDepth of
                        (T a (T (T VectorSize Real))
index1,T a (T (T VectorSize Real))
depth1) ->
                           (forall r.
 T (T VectorSize Real) -> CodeGenFunction r (T (T VectorSize Real)))
-> T (T (T VectorSize Real), T (T VectorSize Real))
     (T (T VectorSize Real))
forall n t y.
(Positive n, C t, Fraction t) =>
(forall r. Serial n t -> CodeGenFunction r y)
-> T (Serial n t, Serial n t) y
CausalPS.osci T (T VectorSize Real) -> CodeGenFunction r (T (T VectorSize Real))
forall r.
T (T VectorSize Real) -> CodeGenFunction r (T (T VectorSize Real))
forall a r.
(PseudoRing a, IntegerConstant a, Fraction a) =>
a -> CodeGenFunction r a
WaveL.approxSine2 T (T (T VectorSize Real), T (T VectorSize Real))
  (T (T VectorSize Real))
-> T a (T (T VectorSize Real), T (T VectorSize Real))
-> T a (T (T VectorSize Real))
forall b c a. T b c -> T a b -> T a c
$&
                              T a (T (T VectorSize Real))
forall {inp}. T inp (T (T VectorSize Real))
expo T a (T (T VectorSize Real))
-> T a (T (T VectorSize Real)) -> T a (T (T VectorSize Real))
forall a. C a => a -> a -> a
* T a (T (T VectorSize Real))
depth1 T a (T (T VectorSize Real))
-> T a (T (T VectorSize Real)) -> T a (T (T VectorSize Real))
forall a. C a => a -> a -> a
*
                                 ((forall r.
 T (T VectorSize Real) -> CodeGenFunction r (T (T VectorSize Real)))
-> T (T (T VectorSize Real), T (T VectorSize Real))
     (T (T VectorSize Real))
forall n t y.
(Positive n, C t, Fraction t) =>
(forall r. Serial n t -> CodeGenFunction r y)
-> T (Serial n t, Serial n t) y
CausalPS.osci T (T VectorSize Real) -> CodeGenFunction r (T (T VectorSize Real))
forall r.
T (T VectorSize Real) -> CodeGenFunction r (T (T VectorSize Real))
forall a r.
(PseudoRing a, IntegerConstant a, Fraction a) =>
a -> CodeGenFunction r a
WaveL.approxSine2
                                  T (T (T VectorSize Real), T (T VectorSize Real))
  (T (T VectorSize Real))
-> T a (T (T VectorSize Real), T (T VectorSize Real))
-> T a (T (T VectorSize Real))
forall b c a. T b c -> T a b -> T a c
$& T a (T (T VectorSize Real))
forall a. C a => a
zero T a (T (T VectorSize Real))
-> T a (T (T VectorSize Real))
-> T a (T (T VectorSize Real), T (T VectorSize Real))
forall a b c. T a b -> T a c -> T a (b, c)
&|& T a (T (T VectorSize Real))
index1T a (T (T VectorSize Real))
-> T a (T (T VectorSize Real)) -> T a (T (T VectorSize Real))
forall a. C a => a -> a -> a
*T a (T (T VectorSize Real))
freq)
                              T a (T (T VectorSize Real))
-> T a (T (T VectorSize Real))
-> T a (T (T VectorSize Real), T (T VectorSize Real))
forall a b c. T a b -> T a c -> T a (b, c)
&|&
                              T a (T (T VectorSize Real))
freq
              in  (forall inp0.
 T inp0 (T (T VectorSize Real), T (T VectorSize Real))
 -> T inp0 (T (T VectorSize Real))
 -> T inp0 (T (T VectorSize Real)))
-> T ((T Real, T Real), (T Real, T (T Real)))
     (T (T VectorSize Real), T (T VectorSize Real))
-> T ((T Real, T Real), (T Real, T (T Real)))
     (T (T (T VectorSize Real)))
-> T ((T Real, T Real), (T Real, T (T Real)))
     (T (T (T VectorSize Real)))
forall a b c inp.
(Phi a, Phi b, Phi c, Undefined a, Undefined b, Undefined c) =>
(forall inp0. T inp0 c -> T inp0 a -> T inp0 b)
-> T inp c -> T inp (T a) -> T inp (T b)
stereoFromMonoControlled T inp0 (T (T VectorSize Real), T (T VectorSize Real))
-> T inp0 (T (T VectorSize Real)) -> T inp0 (T (T VectorSize Real))
forall inp0.
T inp0 (T (T VectorSize Real), T (T VectorSize Real))
-> T inp0 (T (T VectorSize Real)) -> T inp0 (T (T VectorSize Real))
osci (T ((T Real, T Real), (T Real, T (T Real))) (T (T VectorSize Real))
indexT ((T Real, T Real), (T Real, T (T Real))) (T (T VectorSize Real))
-> T ((T Real, T Real), (T Real, T (T Real)))
     (T (T VectorSize Real))
-> T ((T Real, T Real), (T Real, T (T Real)))
     (T (T VectorSize Real), T (T VectorSize Real))
forall a b c. T a b -> T a c -> T a (b, c)
&|&T ((T Real, T Real), (T Real, T (T Real))) (T (T VectorSize Real))
depth) T ((T Real, T Real), (T Real, T (T Real)))
  (T (T (T VectorSize Real)))
freqs)))
      (Maybe Real
-> IO (SampleRate Real -> Real -> T EnvelopeControl Chunk)
pingControlledEnvelope (Real -> Maybe Real
forall a. a -> Maybe a
Just Real
0.01))

{- |
'Stereo.liftApplicative' specialised to 'T'.

Should be moved to Functional utility module.
(Functional module itself would cause cyclic dependency.)
-}
stereoFromMonoControlled,
      _stereoFromMonoControlledArgs,
      _stereoFromMonoControlledGrounded,
      _stereoFromMonoControlledGuided,
      _stereoFromMonoControlledPrepared,
      _stereoFromMonoControlledPrepared2 ::
   (Tuple.Phi a, Tuple.Phi b, Tuple.Phi c) =>
   (Tuple.Undefined a, Tuple.Undefined b, Tuple.Undefined c) =>
   (forall inp0. F.T inp0 c -> F.T inp0 a -> F.T inp0 b) ->
   F.T inp c -> F.T inp (Stereo.T a) -> F.T inp (Stereo.T b)
stereoFromMonoControlled :: forall a b c inp.
(Phi a, Phi b, Phi c, Undefined a, Undefined b, Undefined c) =>
(forall inp0. T inp0 c -> T inp0 a -> T inp0 b)
-> T inp c -> T inp (T a) -> T inp (T b)
stereoFromMonoControlled forall inp0. T inp0 c -> T inp0 a -> T inp0 b
proc T inp c
ctrl T inp (T a)
stereo =
   T (c, a) b -> T (c, T a) (T b)
forall a b c.
(Phi a, Phi b, Phi c, Undefined a, Undefined b, Undefined c) =>
T (c, a) b -> T (c, T a) (T b)
Causal.stereoFromMonoControlled
      (T (c, a) b -> T (c, a) b
forall inp out. T inp out -> T inp out
F.compile (T (c, a) b -> T (c, a) b) -> T (c, a) b -> T (c, a) b
forall a b. (a -> b) -> a -> b
$ (T (c, a) c -> T (c, a) a -> T (c, a) b)
-> (T (c, a) c, T (c, a) a) -> T (c, a) b
forall a b c. (a -> b -> c) -> (a, b) -> c
uncurry T (c, a) c -> T (c, a) a -> T (c, a) b
forall inp0. T inp0 c -> T inp0 a -> T inp0 b
proc ((T (c, a) c, T (c, a) a) -> T (c, a) b)
-> (T (c, a) c, T (c, a) a) -> T (c, a) b
forall a b. (a -> b) -> a -> b
$ T (c, a) (c, a) -> (T (c, a) c, T (c, a) a)
forall (f :: * -> *) a b. Functor f => f (a, b) -> (f a, f b)
unzip (T (c, a) (c, a) -> (T (c, a) c, T (c, a) a))
-> T (c, a) (c, a) -> (T (c, a) c, T (c, a) a)
forall a b. (a -> b) -> a -> b
$ T (c, a) (c, a) -> T (c, a) (c, a)
forall inp out. T inp out -> T inp out
F.lift T (c, a) (c, a)
forall a. T a a
forall {k} (cat :: k -> k -> *) (a :: k). Category cat => cat a a
id)
   T (c, T a) (T b) -> T inp (c, T a) -> T inp (T b)
forall b c a. T b c -> T a b -> T a c
$&
   T inp c
ctrl T inp c -> T inp (T a) -> T inp (c, T a)
forall a b c. T a b -> T a c -> T a (b, c)
&|& T inp (T a)
stereo

_stereoFromMonoControlledArgs :: forall a b c inp.
(Phi a, Phi b, Phi c, Undefined a, Undefined b, Undefined c) =>
(forall inp0. T inp0 c -> T inp0 a -> T inp0 b)
-> T inp c -> T inp (T a) -> T inp (T b)
_stereoFromMonoControlledArgs forall inp0. T inp0 c -> T inp0 a -> T inp0 b
proc T inp c
ctrl T inp (T a)
stereo =
   T (c, a) b -> T (c, T a) (T b)
forall a b c.
(Phi a, Phi b, Phi c, Undefined a, Undefined b, Undefined c) =>
T (c, a) b -> T (c, T a) (T b)
Causal.stereoFromMonoControlled
      ((Arguments (T (AnyArg c, AnyArg a)) (AnyArg c, AnyArg a)
 -> T (AnyArg c, AnyArg a) b)
-> T (AnyArg c, AnyArg a) b
forall inp out.
MakeArguments inp =>
(Arguments (T inp) inp -> T inp out) -> T inp out
F.withArgs ((T (AnyArg c, AnyArg a) c
 -> T (AnyArg c, AnyArg a) a -> T (AnyArg c, AnyArg a) b)
-> (T (AnyArg c, AnyArg a) c, T (AnyArg c, AnyArg a) a)
-> T (AnyArg c, AnyArg a) b
forall a b c. (a -> b -> c) -> (a, b) -> c
uncurry T (AnyArg c, AnyArg a) c
-> T (AnyArg c, AnyArg a) a -> T (AnyArg c, AnyArg a) b
forall inp0. T inp0 c -> T inp0 a -> T inp0 b
proc) T (AnyArg c, AnyArg a) b
-> ((c, a) -> (AnyArg c, AnyArg a)) -> T (c, a) b
forall (a :: * -> * -> *) c d b.
Arrow a =>
a c d -> (b -> c) -> a b d
<<^ (c -> AnyArg c, a -> AnyArg a) -> (c, a) -> (AnyArg c, AnyArg a)
forall a c b d. (a -> c, b -> d) -> (a, b) -> (c, d)
mapPair (c -> AnyArg c
forall a. a -> AnyArg a
F.AnyArg, a -> AnyArg a
forall a. a -> AnyArg a
F.AnyArg))
   T (c, T a) (T b) -> T inp (c, T a) -> T inp (T b)
forall b c a. T b c -> T a b -> T a c
$&
   T inp c
ctrl T inp c -> T inp (T a) -> T inp (c, T a)
forall a b c. T a b -> T a c -> T a (b, c)
&|& T inp (T a)
stereo

_stereoFromMonoControlledGrounded :: forall a b c inp.
(Phi a, Phi b, Phi c, Undefined a, Undefined b, Undefined c) =>
(forall inp0. T inp0 c -> T inp0 a -> T inp0 b)
-> T inp c -> T inp (T a) -> T inp (T b)
_stereoFromMonoControlledGrounded forall inp0. T inp0 c -> T inp0 a -> T inp0 b
proc T inp c
ctrl T inp (T a)
stereo =
   T (c, a) b -> T (c, T a) (T b)
forall a b c.
(Phi a, Phi b, Phi c, Undefined a, Undefined b, Undefined c) =>
T (c, a) b -> T (c, T a) (T b)
Causal.stereoFromMonoControlled
      (((Ground (T (c, a)) c, Ground (T (c, a)) a) -> T (c, a) b)
-> T (c, a) b
forall inp args out.
(MakeGroundArguments (T inp) args, GroundArguments args ~ inp) =>
(args -> T inp out) -> T inp out
F.withGroundArgs (((Ground (T (c, a)) c, Ground (T (c, a)) a) -> T (c, a) b)
 -> T (c, a) b)
-> ((Ground (T (c, a)) c, Ground (T (c, a)) a) -> T (c, a) b)
-> T (c, a) b
forall a b. (a -> b) -> a -> b
$ \(F.Ground T (c, a) c
c, F.Ground T (c, a) a
s) -> T (c, a) c -> T (c, a) a -> T (c, a) b
forall inp0. T inp0 c -> T inp0 a -> T inp0 b
proc T (c, a) c
c T (c, a) a
s)
   T (c, T a) (T b) -> T inp (c, T a) -> T inp (T b)
forall b c a. T b c -> T a b -> T a c
$&
   T inp c
ctrl T inp c -> T inp (T a) -> T inp (c, T a)
forall a b c. T a b -> T a c -> T a (b, c)
&|& T inp (T a)
stereo

_stereoFromMonoControlledGuided :: forall a b c inp.
(Phi a, Phi b, Phi c, Undefined a, Undefined b, Undefined c) =>
(forall inp0. T inp0 c -> T inp0 a -> T inp0 b)
-> T inp c -> T inp (T a) -> T inp (T b)
_stereoFromMonoControlledGuided forall inp0. T inp0 c -> T inp0 a -> T inp0 b
proc T inp c
ctrl T inp (T a)
stereo =
   T (c, a) b -> T (c, T a) (T b)
forall a b c.
(Phi a, Phi b, Phi c, Undefined a, Undefined b, Undefined c) =>
T (c, a) b -> T (c, T a) (T b)
Causal.stereoFromMonoControlled
      ((Atom c, Atom a)
-> (GuidedArguments (T (c, a)) (Atom c, Atom a) -> T (c, a) b)
-> T (c, a) b
forall pat inp out.
(MakeGuidedArguments pat, PatternArguments pat ~ inp) =>
pat -> (GuidedArguments (T inp) pat -> T inp out) -> T inp out
F.withGuidedArgs (Atom c
forall a. Atom a
F.atom, Atom a
forall a. Atom a
F.atom) ((T (c, a) c -> T (c, a) a -> T (c, a) b)
-> (T (c, a) c, T (c, a) a) -> T (c, a) b
forall a b c. (a -> b -> c) -> (a, b) -> c
uncurry T (c, a) c -> T (c, a) a -> T (c, a) b
forall inp0. T inp0 c -> T inp0 a -> T inp0 b
proc))
   T (c, T a) (T b) -> T inp (c, T a) -> T inp (T b)
forall b c a. T b c -> T a b -> T a c
$&
   T inp c
ctrl T inp c -> T inp (T a) -> T inp (c, T a)
forall a b c. T a b -> T a c -> T a (b, c)
&|& T inp (T a)
stereo

_stereoFromMonoControlledPrepared :: forall a b c inp.
(Phi a, Phi b, Phi c, Undefined a, Undefined b, Undefined c) =>
(forall inp0. T inp0 c -> T inp0 a -> T inp0 b)
-> T inp c -> T inp (T a) -> T inp (T b)
_stereoFromMonoControlledPrepared forall inp0. T inp0 c -> T inp0 a -> T inp0 b
proc T inp c
ctrl T inp (T a)
stereo =
   T (c, a) b -> T (c, T a) (T b)
forall a b c.
(Phi a, Phi b, Phi c, Undefined a, Undefined b, Undefined c) =>
T (c, a) b -> T (c, T a) (T b)
Causal.stereoFromMonoControlled
      (PrepareArguments (T (c, a)) (c, a) (T (c, a) c, T (c, a) a)
-> ((T (c, a) c, T (c, a) a) -> T (c, a) b) -> T (c, a) b
forall inp a out.
PrepareArguments (T inp) inp a -> (a -> T inp out) -> T inp out
F.withPreparedArgs (PrepareArguments (T (c, a)) c (T (c, a) c)
-> PrepareArguments (T (c, a)) a (T (c, a) a)
-> PrepareArguments (T (c, a)) (c, a) (T (c, a) c, T (c, a) a)
forall (f :: * -> *) a0 b0 a1 b1.
Functor f =>
PrepareArguments f a0 b0
-> PrepareArguments f a1 b1 -> PrepareArguments f (a0, a1) (b0, b1)
F.pairArgs PrepareArguments (T (c, a)) c (T (c, a) c)
forall (f :: * -> *) a. PrepareArguments f a (f a)
F.atomArg PrepareArguments (T (c, a)) a (T (c, a) a)
forall (f :: * -> *) a. PrepareArguments f a (f a)
F.atomArg) ((T (c, a) c -> T (c, a) a -> T (c, a) b)
-> (T (c, a) c, T (c, a) a) -> T (c, a) b
forall a b c. (a -> b -> c) -> (a, b) -> c
uncurry T (c, a) c -> T (c, a) a -> T (c, a) b
forall inp0. T inp0 c -> T inp0 a -> T inp0 b
proc))
   T (c, T a) (T b) -> T inp (c, T a) -> T inp (T b)
forall b c a. T b c -> T a b -> T a c
$&
   T inp c
ctrl T inp c -> T inp (T a) -> T inp (c, T a)
forall a b c. T a b -> T a c -> T a (b, c)
&|& T inp (T a)
stereo

_stereoFromMonoControlledPrepared2 :: forall a b c inp.
(Phi a, Phi b, Phi c, Undefined a, Undefined b, Undefined c) =>
(forall inp0. T inp0 c -> T inp0 a -> T inp0 b)
-> T inp c -> T inp (T a) -> T inp (T b)
_stereoFromMonoControlledPrepared2 forall inp0. T inp0 c -> T inp0 a -> T inp0 b
proc T inp c
ctrl T inp (T a)
stereo =
   T (c, a) b -> T (c, T a) (T b)
forall a b c.
(Phi a, Phi b, Phi c, Undefined a, Undefined b, Undefined c) =>
T (c, a) b -> T (c, T a) (T b)
Causal.stereoFromMonoControlled
      (PrepareArguments (T (c, a)) c (T (c, a) c)
-> PrepareArguments (T (c, a)) a (T (c, a) a)
-> (T (c, a) c -> T (c, a) a -> T (c, a) b)
-> T (c, a) b
forall inp0 inp1 a b out.
PrepareArguments (T (inp0, inp1)) inp0 a
-> PrepareArguments (T (inp0, inp1)) inp1 b
-> (a -> b -> T (inp0, inp1) out)
-> T (inp0, inp1) out
F.withPreparedArgs2 PrepareArguments (T (c, a)) c (T (c, a) c)
forall (f :: * -> *) a. PrepareArguments f a (f a)
F.atomArg PrepareArguments (T (c, a)) a (T (c, a) a)
forall (f :: * -> *) a. PrepareArguments f a (f a)
F.atomArg T (c, a) c -> T (c, a) a -> T (c, a) b
forall inp0. T inp0 c -> T inp0 a -> T inp0 b
proc)
   T (c, T a) (T b) -> T inp (c, T a) -> T inp (T b)
forall b c a. T b c -> T a b -> T a c
$&
   T inp c
ctrl T inp c -> T inp (T a) -> T inp (c, T a)
forall a b c. T a b -> T a c -> T a (b, c)
&|& T inp (T a)
stereo


type RealValue = MultiValue.T Real

bellNoiseStereoFM ::
   IO (SampleRate Real -> Real -> Real ->
       PIO.T
          (WithEnvelopeControl
             (Zip.T
                (Zip.T (Control Real) (Control Real))
                DetuneBendModControl))
          StereoChunk)
bellNoiseStereoFM :: IO
  (SampleRate Real
   -> Real
   -> Real
   -> T (WithEnvelopeControl
           (T (T (Control Real) (Control Real)) DetuneBendModControl))
        StereoChunk)
bellNoiseStereoFM =
   ((SampleRate Real
  -> T (T (T Chunk (T Chunk Chunk))
          (T (T (Control Real) (Control Real)) DetuneBendModControl))
       StereoChunk)
 -> (SampleRate Real -> Real -> T EnvelopeControl Chunk)
 -> (SampleRate Real -> Real -> T EnvelopeControl Chunk)
 -> SampleRate Real
 -> Real
 -> Real
 -> T (WithEnvelopeControl
         (T (T (Control Real) (Control Real)) DetuneBendModControl))
      StereoChunk)
-> IO
     (SampleRate Real
      -> T (T (T Chunk (T Chunk Chunk))
              (T (T (Control Real) (Control Real)) DetuneBendModControl))
           StereoChunk)
-> IO (SampleRate Real -> Real -> T EnvelopeControl Chunk)
-> IO (SampleRate Real -> Real -> T EnvelopeControl Chunk)
-> IO
     (SampleRate Real
      -> Real
      -> Real
      -> T (WithEnvelopeControl
              (T (T (Control Real) (Control Real)) DetuneBendModControl))
           StereoChunk)
forall (f :: * -> *) a b c d.
Applicative f =>
(a -> b -> c -> d) -> f a -> f b -> f c -> f d
liftA3
      (\SampleRate Real
-> T (T (T Chunk (T Chunk Chunk))
        (T (T (Control Real) (Control Real)) DetuneBendModControl))
     StereoChunk
osc SampleRate Real -> Real -> T EnvelopeControl Chunk
env SampleRate Real -> Real -> T EnvelopeControl Chunk
envInf SampleRate Real
sr Real
vel Real
freq ->
         SampleRate Real
-> T (T (T Chunk (T Chunk Chunk))
        (T (T (Control Real) (Control Real)) DetuneBendModControl))
     StereoChunk
osc SampleRate Real
sr
         T (T (T Chunk (T Chunk Chunk))
     (T (T (Control Real) (Control Real)) DetuneBendModControl))
  StereoChunk
-> T (WithEnvelopeControl
        (T (T (Control Real) (Control Real)) DetuneBendModControl))
     (T (T Chunk (T Chunk Chunk))
        (T (T (Control Real) (Control Real)) DetuneBendModControl))
-> T (WithEnvelopeControl
        (T (T (Control Real) (Control Real)) DetuneBendModControl))
     StereoChunk
forall b c a. T b c -> T a b -> T a c
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
.
         (T (T (T (Control Real) (Control Real)) DetuneBendModControl)
  (T (T (Control Real) (Control Real)) DetuneBendModControl)
-> T (T (T Chunk (T Chunk Chunk))
        (T (T (Control Real) (Control Real)) DetuneBendModControl))
     (T (T Chunk (T Chunk Chunk))
        (T (T (Control Real) (Control Real)) DetuneBendModControl))
forall (arrow :: * -> * -> *) a b c.
Arrow arrow =>
arrow a b -> arrow (T c a) (T c b)
Zip.arrowSecond (T (T (T (Control Real) (Control Real)) DetuneBendModControl)
   (T (T (Control Real) (Control Real)) DetuneBendModControl)
 -> T (T (T Chunk (T Chunk Chunk))
         (T (T (Control Real) (Control Real)) DetuneBendModControl))
      (T (T Chunk (T Chunk Chunk))
         (T (T (Control Real) (Control Real)) DetuneBendModControl)))
-> T (T (T (Control Real) (Control Real)) DetuneBendModControl)
     (T (T (Control Real) (Control Real)) DetuneBendModControl)
-> T (T (T Chunk (T Chunk Chunk))
        (T (T (Control Real) (Control Real)) DetuneBendModControl))
     (T (T Chunk (T Chunk Chunk))
        (T (T (Control Real) (Control Real)) DetuneBendModControl))
forall a b. (a -> b) -> a -> b
$ T DetuneBendModControl DetuneBendModControl
-> T (T (T (Control Real) (Control Real)) DetuneBendModControl)
     (T (T (Control Real) (Control Real)) DetuneBendModControl)
forall (arrow :: * -> * -> *) a b c.
Arrow arrow =>
arrow a b -> arrow (T c a) (T c b)
Zip.arrowSecond (T DetuneBendModControl DetuneBendModControl
 -> T (T (T (Control Real) (Control Real)) DetuneBendModControl)
      (T (T (Control Real) (Control Real)) DetuneBendModControl))
-> T DetuneBendModControl DetuneBendModControl
-> T (T (T (Control Real) (Control Real)) DetuneBendModControl)
     (T (T (Control Real) (Control Real)) DetuneBendModControl)
forall a b. (a -> b) -> a -> b
$
          T (T ShortStrictTime (T Real)) (T ShortStrictTime (T Real))
-> T DetuneBendModControl DetuneBendModControl
forall (arrow :: * -> * -> *) a b c.
Arrow arrow =>
arrow a b -> arrow (T c a) (T c b)
Zip.arrowSecond (T (T ShortStrictTime (T Real)) (T ShortStrictTime (T Real))
 -> T DetuneBendModControl DetuneBendModControl)
-> T (T ShortStrictTime (T Real)) (T ShortStrictTime (T Real))
-> T DetuneBendModControl DetuneBendModControl
forall a b. (a -> b) -> a -> b
$
            (T ShortStrictTime (T Real) -> T ShortStrictTime (T Real))
-> T (T ShortStrictTime (T Real)) (T ShortStrictTime (T Real))
forall b c. (b -> c) -> T b c
forall (a :: * -> * -> *) b c. Arrow a => (b -> c) -> a b c
arr ((T ShortStrictTime (T Real) -> T ShortStrictTime (T Real))
 -> T (T ShortStrictTime (T Real)) (T ShortStrictTime (T Real)))
-> (T ShortStrictTime (T Real) -> T ShortStrictTime (T Real))
-> T (T ShortStrictTime (T Real)) (T ShortStrictTime (T Real))
forall a b. (a -> b) -> a -> b
$ SampleRate Real
-> Real -> T ShortStrictTime (T Real) -> T ShortStrictTime (T Real)
forall (stream :: * -> *).
Functor stream =>
SampleRate Real -> Real -> stream (T Real) -> stream (T Real)
transposeModulation SampleRate Real
sr Real
freq)
         T (T (T Chunk (T Chunk Chunk))
     (T (T (Control Real) (Control Real)) DetuneBendModControl))
  (T (T Chunk (T Chunk Chunk))
     (T (T (Control Real) (Control Real)) DetuneBendModControl))
-> T (WithEnvelopeControl
        (T (T (Control Real) (Control Real)) DetuneBendModControl))
     (T (T Chunk (T Chunk Chunk))
        (T (T (Control Real) (Control Real)) DetuneBendModControl))
-> T (WithEnvelopeControl
        (T (T (Control Real) (Control Real)) DetuneBendModControl))
     (T (T Chunk (T Chunk Chunk))
        (T (T (Control Real) (Control Real)) DetuneBendModControl))
forall b c a. T b c -> T a b -> T a c
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
.
         T EnvelopeControl (T Chunk (T Chunk Chunk))
-> T (WithEnvelopeControl
        (T (T (Control Real) (Control Real)) DetuneBendModControl))
     (T (T Chunk (T Chunk Chunk))
        (T (T (Control Real) (Control Real)) DetuneBendModControl))
forall (arrow :: * -> * -> *) a b.
(Arrow arrow, Transform a, Transform b) =>
arrow EnvelopeControl a -> arrow (WithEnvelopeControl b) (T a b)
zipEnvelope
            (T EnvelopeControl Chunk
-> T EnvelopeControl (T Chunk Chunk)
-> T EnvelopeControl (T Chunk (T Chunk Chunk))
forall (arrow :: * -> * -> *) a b c.
(Arrow arrow, Transform a, Transform b, Transform c) =>
arrow a b -> arrow a c -> arrow a (T b c)
Zip.arrowFanoutShorten
               (SampleRate Real -> Real -> T EnvelopeControl Chunk
env SampleRate Real
sr (Real
velReal -> Real -> Real
forall a. C a => a -> a -> a
*Real
0.5))
               (let shortenTimes ::
                       Real ->
                       PIOId (Zip.T (Control Time) (Control Time))
                    shortenTimes :: Real -> PIOId (T (Control Time) (Control Time))
shortenTimes Real
n =
                       let rn :: Real
rn = Real -> Real
forall a. C a => a -> a
recip Real
n
                       in  (T (Control Time) (Control Time)
-> PIOId (T (Control Time) (Control Time))
forall (arrow :: * -> * -> *) a b c.
Arrow arrow =>
arrow a b -> arrow (T a c) (T b c)
Zip.arrowFirst (T (Control Time) (Control Time)
 -> PIOId (T (Control Time) (Control Time)))
-> T (Control Time) (Control Time)
-> PIOId (T (Control Time) (Control Time))
forall a b. (a -> b) -> a -> b
$ (Control Time -> Control Time) -> T (Control Time) (Control Time)
forall b c. (b -> c) -> T b c
forall (a :: * -> * -> *) b c. Arrow a => (b -> c) -> a b c
arr ((Control Time -> Control Time) -> T (Control Time) (Control Time))
-> (Control Time -> Control Time)
-> T (Control Time) (Control Time)
forall a b. (a -> b) -> a -> b
$ (Time -> Time) -> Control Time -> Control Time
forall a b. (a -> b) -> T ShortStrictTime a -> T ShortStrictTime b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap ((Time -> Time) -> Control Time -> Control Time)
-> (Time -> Time) -> Control Time -> Control Time
forall a b. (a -> b) -> a -> b
$ Real -> Time -> Time
forall u a. (C u, C a) => a -> T u a -> T u a
DN.scale Real
rn)
                           PIOId (T (Control Time) (Control Time))
-> PIOId (T (Control Time) (Control Time))
-> PIOId (T (Control Time) (Control Time))
forall b c a. T b c -> T a b -> T a c
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
.
                           (T (Control Time) (Control Time)
-> PIOId (T (Control Time) (Control Time))
forall (arrow :: * -> * -> *) a b c.
Arrow arrow =>
arrow a b -> arrow (T c a) (T c b)
Zip.arrowSecond (T (Control Time) (Control Time)
 -> PIOId (T (Control Time) (Control Time)))
-> T (Control Time) (Control Time)
-> PIOId (T (Control Time) (Control Time))
forall a b. (a -> b) -> a -> b
$ (Control Time -> Control Time) -> T (Control Time) (Control Time)
forall b c. (b -> c) -> T b c
forall (a :: * -> * -> *) b c. Arrow a => (b -> c) -> a b c
arr ((Control Time -> Control Time) -> T (Control Time) (Control Time))
-> (Control Time -> Control Time)
-> T (Control Time) (Control Time)
forall a b. (a -> b) -> a -> b
$ (Time -> Time) -> Control Time -> Control Time
forall a b. (a -> b) -> T ShortStrictTime a -> T ShortStrictTime b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap ((Time -> Time) -> Control Time -> Control Time)
-> (Time -> Time) -> Control Time -> Control Time
forall a b. (a -> b) -> a -> b
$ Real -> Time -> Time
forall u a. (C u, C a) => a -> T u a -> T u a
DN.scale Real
rn)
                in  T EnvelopeControl Chunk
-> T EnvelopeControl Chunk -> T EnvelopeControl (T Chunk Chunk)
forall (arrow :: * -> * -> *) a b c.
Arrow arrow =>
arrow a b -> arrow a c -> arrow a (T b c)
PIO.zip
                      (SampleRate Real -> Real -> T EnvelopeControl Chunk
envInf SampleRate Real
sr (Real
velReal -> Real -> Real
forall a. C a => a -> a -> a
*Real
2)
                       T EnvelopeControl Chunk
-> T EnvelopeControl EnvelopeControl -> T EnvelopeControl Chunk
forall b c a. T b c -> T a b -> T a c
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
.
                       PIOId (T (Control Time) (Control Time))
-> T EnvelopeControl EnvelopeControl
forall (arrow :: * -> * -> *) a b c.
Arrow arrow =>
arrow a b -> arrow (T c a) (T c b)
Zip.arrowSecond (Real -> PIOId (T (Control Time) (Control Time))
shortenTimes Real
4))
                      (SampleRate Real -> Real -> T EnvelopeControl Chunk
envInf SampleRate Real
sr (Real
velReal -> Real -> Real
forall a. C a => a -> a -> a
*Real
4)
                       T EnvelopeControl Chunk
-> T EnvelopeControl EnvelopeControl -> T EnvelopeControl Chunk
forall b c a. T b c -> T a b -> T a c
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
.
                       PIOId (T (Control Time) (Control Time))
-> T EnvelopeControl EnvelopeControl
forall (arrow :: * -> * -> *) a b c.
Arrow arrow =>
arrow a b -> arrow (T c a) (T c b)
Zip.arrowSecond (Real -> PIOId (T (Control Time) (Control Time))
shortenTimes Real
7)))))
      (DSL
  (SampleRate Real
   -> T (T (T Chunk (T Chunk Chunk))
           (T (T (Control Real) (Control Real)) DetuneBendModControl))
        StereoChunk)
  (Element
     (In
        (SampleRate Real
         -> T (T (T Chunk (T Chunk Chunk))
                 (T (T (Control Real) (Control Real)) DetuneBendModControl))
              StereoChunk)))
  (Element
     (Out
        (SampleRate Real
         -> T (T (T Chunk (T Chunk Chunk))
                 (T (T (Control Real) (Control Real)) DetuneBendModControl))
              StereoChunk)))
-> IO
     (SampleRate Real
      -> T (T (T Chunk (T Chunk Chunk))
              (T (T (Control Real) (Control Real)) DetuneBendModControl))
           StereoChunk)
forall f a al b bl.
(Run f, In f ~ a, Default a, Element a ~ al, Out f ~ b, Default b,
 Element b ~ bl) =>
DSL f al bl -> IO f
CausalRender.run (DSL
   (SampleRate Real
    -> T (T (T Chunk (T Chunk Chunk))
            (T (T (Control Real) (Control Real)) DetuneBendModControl))
         StereoChunk)
   (Element
      (In
         (SampleRate Real
          -> T (T (T Chunk (T Chunk Chunk))
                  (T (T (Control Real) (Control Real)) DetuneBendModControl))
               StereoChunk)))
   (Element
      (Out
         (SampleRate Real
          -> T (T (T Chunk (T Chunk Chunk))
                  (T (T (Control Real) (Control Real)) DetuneBendModControl))
               StereoChunk)))
 -> IO
      (SampleRate Real
       -> T (T (T Chunk (T Chunk Chunk))
               (T (T (Control Real) (Control Real)) DetuneBendModControl))
            StereoChunk))
-> DSL
     (SampleRate Real
      -> T (T (T Chunk (T Chunk Chunk))
              (T (T (Control Real) (Control Real)) DetuneBendModControl))
           StereoChunk)
     (Element
        (In
           (SampleRate Real
            -> T (T (T Chunk (T Chunk Chunk))
                    (T (T (Control Real) (Control Real)) DetuneBendModControl))
                 StereoChunk)))
     (Element
        (Out
           (SampleRate Real
            -> T (T (T Chunk (T Chunk Chunk))
                    (T (T (Control Real) (Control Real)) DetuneBendModControl))
                 StereoChunk)))
-> IO
     (SampleRate Real
      -> T (T (T Chunk (T Chunk Chunk))
              (T (T (Control Real) (Control Real)) DetuneBendModControl))
           StereoChunk)
forall a b. (a -> b) -> a -> b
$
       (SampleRate (Exp Real) -> Exp Real -> Exp Real)
-> Exp Real
-> (Exp Real
    -> SampleRate (Exp Real)
    -> T ((T (T VectorSize Real),
           (T (T VectorSize Real), T (T VectorSize Real))),
          ((T Real, T Real), (T Real, T (T Real))))
         (T (T (T VectorSize Real))))
-> SampleRate (Exp Real)
-> T ((T (T VectorSize Real),
       (T (T VectorSize Real), T (T VectorSize Real))),
      ((T Real, T Real), (T Real, T (T Real))))
     (T (T (T VectorSize Real)))
forall a b c d.
(SampleRate a -> b -> c)
-> b -> (c -> SampleRate a -> d) -> SampleRate a -> d
constant SampleRate (Exp Real) -> Exp Real -> Exp Real
forall a. C a => SampleRate a -> a -> a
noiseReference Exp Real
20000 ((Exp Real
  -> SampleRate (Exp Real)
  -> T ((T (T VectorSize Real),
         (T (T VectorSize Real), T (T VectorSize Real))),
        ((T Real, T Real), (T Real, T (T Real))))
       (T (T (T VectorSize Real))))
 -> SampleRate (Exp Real)
 -> T ((T (T VectorSize Real),
        (T (T VectorSize Real), T (T VectorSize Real))),
       ((T Real, T Real), (T Real, T (T Real))))
      (T (T (T VectorSize Real))))
-> (Exp Real
    -> SampleRate (Exp Real)
    -> T ((T (T VectorSize Real),
           (T (T VectorSize Real), T (T VectorSize Real))),
          ((T Real, T Real), (T Real, T (T Real))))
         (T (T (T VectorSize Real))))
-> SampleRate (Exp Real)
-> T ((T (T VectorSize Real),
       (T (T VectorSize Real), T (T VectorSize Real))),
      ((T Real, T Real), (T Real, T (T Real))))
     (T (T (T VectorSize Real)))
forall a b. (a -> b) -> a -> b
$ \Exp Real
noiseRef ->
       (SampleRate (Exp Real) -> Exp Real -> Exp Real)
-> Exp Real
-> (Exp Real
    -> SampleRate (Exp Real)
    -> T ((T (T VectorSize Real),
           (T (T VectorSize Real), T (T VectorSize Real))),
          ((T Real, T Real), (T Real, T (T Real))))
         (T (T (T VectorSize Real))))
-> SampleRate (Exp Real)
-> T ((T (T VectorSize Real),
       (T (T VectorSize Real), T (T VectorSize Real))),
      ((T Real, T Real), (T Real, T (T Real))))
     (T (T (T VectorSize Real)))
forall a b c d.
(SampleRate a -> b -> c)
-> b -> (c -> SampleRate a -> d) -> SampleRate a -> d
constant SampleRate (Exp Real) -> Exp Real -> Exp Real
forall a. C a => SampleRate a -> a -> a
frequency Exp Real
5 ((Exp Real
  -> SampleRate (Exp Real)
  -> T ((T (T VectorSize Real),
         (T (T VectorSize Real), T (T VectorSize Real))),
        ((T Real, T Real), (T Real, T (T Real))))
       (T (T (T VectorSize Real))))
 -> SampleRate (Exp Real)
 -> T ((T (T VectorSize Real),
        (T (T VectorSize Real), T (T VectorSize Real))),
       ((T Real, T Real), (T Real, T (T Real))))
      (T (T (T VectorSize Real))))
-> (Exp Real
    -> SampleRate (Exp Real)
    -> T ((T (T VectorSize Real),
           (T (T VectorSize Real), T (T VectorSize Real))),
          ((T Real, T Real), (T Real, T (T Real))))
         (T (T (T VectorSize Real))))
-> SampleRate (Exp Real)
-> T ((T (T VectorSize Real),
       (T (T VectorSize Real), T (T VectorSize Real))),
      ((T Real, T Real), (T Real, T (T Real))))
     (T (T (T VectorSize Real)))
forall a b. (a -> b) -> a -> b
$ \Exp Real
speed SampleRate (Exp Real)
_sr ->
         ((Arguments
   (T ((T (T VectorSize Real),
        (T (T VectorSize Real), T (T VectorSize Real))),
       ((T Real, T Real), (T Real, T (T Real)))))
   ((T (T VectorSize Real),
     (T (T VectorSize Real), T (T VectorSize Real))),
    ((T Real, T Real), (T Real, T (T Real))))
 -> T ((T (T VectorSize Real),
        (T (T VectorSize Real), T (T VectorSize Real))),
       ((T Real, T Real), (T Real, T (T Real))))
      (T (T (T VectorSize Real))))
-> T ((T (T VectorSize Real),
       (T (T VectorSize Real), T (T VectorSize Real))),
      ((T Real, T Real), (T Real, T (T Real))))
     (T (T (T VectorSize Real)))
forall inp out.
MakeArguments inp =>
(Arguments (T inp) inp -> T inp out) -> T inp out
F.withArgs ((Arguments
    (T ((T (T VectorSize Real),
         (T (T VectorSize Real), T (T VectorSize Real))),
        ((T Real, T Real), (T Real, T (T Real)))))
    ((T (T VectorSize Real),
      (T (T VectorSize Real), T (T VectorSize Real))),
     ((T Real, T Real), (T Real, T (T Real))))
  -> T ((T (T VectorSize Real),
         (T (T VectorSize Real), T (T VectorSize Real))),
        ((T Real, T Real), (T Real, T (T Real))))
       (T (T (T VectorSize Real))))
 -> T ((T (T VectorSize Real),
        (T (T VectorSize Real), T (T VectorSize Real))),
       ((T Real, T Real), (T Real, T (T Real))))
      (T (T (T VectorSize Real))))
-> (Arguments
      (T ((T (T VectorSize Real),
           (T (T VectorSize Real), T (T VectorSize Real))),
          ((T Real, T Real), (T Real, T (T Real)))))
      ((T (T VectorSize Real),
        (T (T VectorSize Real), T (T VectorSize Real))),
       ((T Real, T Real), (T Real, T (T Real))))
    -> T ((T (T VectorSize Real),
           (T (T VectorSize Real), T (T VectorSize Real))),
          ((T Real, T Real), (T Real, T (T Real))))
         (T (T (T VectorSize Real))))
-> T ((T (T VectorSize Real),
       (T (T VectorSize Real), T (T VectorSize Real))),
      ((T Real, T Real), (T Real, T (T Real))))
     (T (T (T VectorSize Real)))
forall a b. (a -> b) -> a -> b
$ \((T ((T (T VectorSize Real),
    (T (T VectorSize Real), T (T VectorSize Real))),
   ((T Real, T Real), (T Real, T (T Real))))
  (T (T VectorSize Real))
env1,(T ((T (T VectorSize Real),
    (T (T VectorSize Real), T (T VectorSize Real))),
   ((T Real, T Real), (T Real, T (T Real))))
  (T (T VectorSize Real))
env4,T ((T (T VectorSize Real),
    (T (T VectorSize Real), T (T VectorSize Real))),
   ((T Real, T Real), (T Real, T (T Real))))
  (T (T VectorSize Real))
env7)),((T ((T (T VectorSize Real),
    (T (T VectorSize Real), T (T VectorSize Real))),
   ((T Real, T Real), (T Real, T (T Real))))
  (T Real)
noiseAmp0,T ((T (T VectorSize Real),
    (T (T VectorSize Real), T (T VectorSize Real))),
   ((T Real, T Real), (T Real, T (T Real))))
  (T Real)
noiseReson),(T ((T (T VectorSize Real),
     (T (T VectorSize Real), T (T VectorSize Real))),
    ((T Real, T Real), (T Real, T (T Real))))
   (T Real),
 T ((T (T VectorSize Real),
     (T (T VectorSize Real), T (T VectorSize Real))),
    ((T Real, T Real), (T Real, T (T Real))))
   (T (T Real)))
fm)) ->
          let noiseAmp :: T ((T (T VectorSize Real),
    (T (T VectorSize Real), T (T VectorSize Real))),
   ((T Real, T Real), (T Real, T (T Real))))
  (T (T VectorSize Real))
noiseAmp = (Exp Real -> Exp (T VectorSize Real))
-> T (T Real) (T (T VectorSize Real))
forall ae a be b.
(Aggregate ae a, Aggregate be b) =>
(ae -> be) -> T a b
Causal.map Exp Real -> Exp (T VectorSize Real)
forall n a. (Positive n, C a) => Exp a -> Exp (T n a)
Serial.upsample T (T Real) (T (T VectorSize Real))
-> T ((T (T VectorSize Real),
       (T (T VectorSize Real), T (T VectorSize Real))),
      ((T Real, T Real), (T Real, T (T Real))))
     (T Real)
-> T ((T (T VectorSize Real),
       (T (T VectorSize Real), T (T VectorSize Real))),
      ((T Real, T Real), (T Real, T (T Real))))
     (T (T VectorSize Real))
forall b c a. T b c -> T a b -> T a c
$& T ((T (T VectorSize Real),
    (T (T VectorSize Real), T (T VectorSize Real))),
   ((T Real, T Real), (T Real, T (T Real))))
  (T Real)
noiseAmp0
              noiseParam ::
                  Causal.T
                     (RealValue, RealValue)
                     (Moog.Parameter TypeNum.D8 RealValue)
              noiseParam :: T (T Real, T Real) (Parameter D8 (T Real))
noiseParam =
                 T (T Real, T Real) (Parameter D8 (T Real))
-> T (T Real, (T Real, T Real)) (Parameter D8 (T Real))
forall b c a.
(C b, C c, IntegerConstant c, Additive c, Comparison c) =>
T a b -> T (T c, a) b
Causal.quantizeLift
                       ((Exp Real -> Exp Real -> Parameter D8 (Exp Real))
-> T (T Real, T Real) (Parameter D8 (T Real))
forall ae a be b ce c.
(Aggregate ae a, Aggregate be b, Aggregate ce c) =>
(ae -> be -> ce) -> T (a, b) c
Causal.zipWith (Proxy D8 -> Exp Real -> Exp Real -> Parameter D8 (Exp Real)
forall n a. (Natural n, C a) => Proxy n -> a -> a -> Parameter n a
Moog.parameter Proxy D8
TypeNum.d8))
                    T (T Real, (T Real, T Real)) (Parameter D8 (T Real))
-> Real -> T (T Real, T Real) (Parameter D8 (T Real))
forall (process :: * -> * -> *) a b c.
(C process, C a) =>
process (T a, b) c -> a -> process b c
$<# (Real
100 Real -> Real -> Real
forall a. C a => a -> a -> a
/ Int -> Real
forall a b. (C a, C b) => a -> b
fromIntegral Int
vectorSize :: Real)
              noise :: T inp (T (T VectorSize Real))
noise = T (T (T VectorSize Real)) -> T inp (T (T VectorSize Real))
forall out inp. T out -> T inp out
F.fromSignal (Exp Word32 -> Exp Real -> T (T (T VectorSize Real))
forall n a ar.
(NativeFloating n a ar, PseudoRing a, IntegerConstant a,
 Algebraic a, RationalConstant a, Positive n,
 Positive (n :*: D32)) =>
Exp Word32 -> Exp a -> T (Serial n a)
SigPS.noise Exp Word32
12 Exp Real
noiseRef)
              freqs :: T ((T (T VectorSize Real),
    (T (T VectorSize Real), T (T VectorSize Real))),
   ((T Real, T Real), (T Real, T (T Real))))
  (T (T (T VectorSize Real)))
freqs = Exp Real
-> (T ((T (T VectorSize Real),
        (T (T VectorSize Real), T (T VectorSize Real))),
       ((T Real, T Real), (T Real, T (T Real))))
      (T Real),
    T ((T (T VectorSize Real),
        (T (T VectorSize Real), T (T VectorSize Real))),
       ((T Real, T Real), (T Real, T (T Real))))
      (T (T Real)))
-> T ((T (T VectorSize Real),
       (T (T VectorSize Real), T (T VectorSize Real))),
      ((T Real, T Real), (T Real, T (T Real))))
     (T (T (T VectorSize Real)))
forall inp.
Exp Real
-> (T inp (T Real), T inp (T (T Real)))
-> T inp (T (T (T VectorSize Real)))
stereoFrequenciesFromDetuneBendModulation Exp Real
speed (T ((T (T VectorSize Real),
     (T (T VectorSize Real), T (T VectorSize Real))),
    ((T Real, T Real), (T Real, T (T Real))))
   (T Real),
 T ((T (T VectorSize Real),
     (T (T VectorSize Real), T (T VectorSize Real))),
    ((T Real, T Real), (T Real, T (T Real))))
   (T (T Real)))
fm
              osci :: Exp Real
-> T ((T (T VectorSize Real),
       (T (T VectorSize Real), T (T VectorSize Real))),
      ((T Real, T Real), (T Real, T (T Real))))
     (T (T VectorSize Real))
-> Exp Real
-> T ((T (T VectorSize Real),
       (T (T VectorSize Real), T (T VectorSize Real))),
      ((T Real, T Real), (T Real, T (T Real))))
     (T (T (T VectorSize Real)))
osci Exp Real
amp T ((T (T VectorSize Real),
    (T (T VectorSize Real), T (T VectorSize Real))),
   ((T Real, T Real), (T Real, T (T Real))))
  (T (T VectorSize Real))
env Exp Real
n =
                 Exp Real
-> T (T (T (T VectorSize Real))) (T (T (T VectorSize Real)))
forall n a.
(Positive n, PseudoRing a) =>
Exp a -> T (T (Serial n a)) (T (Serial n a))
CausalPS.amplifyStereo Exp Real
amp T (T (T (T VectorSize Real))) (T (T (T VectorSize Real)))
-> T ((T (T VectorSize Real),
       (T (T VectorSize Real), T (T VectorSize Real))),
      ((T Real, T Real), (T Real, T (T Real))))
     (T (T (T VectorSize Real)))
-> T ((T (T VectorSize Real),
       (T (T VectorSize Real), T (T VectorSize Real))),
      ((T Real, T Real), (T Real, T (T Real))))
     (T (T (T VectorSize Real)))
forall b c a. T b c -> T a b -> T a c
$&
                 T (T (T VectorSize Real), T (T (T VectorSize Real)))
  (T (T (T VectorSize Real)))
forall a. PseudoRing a => T (a, T a) (T a)
Causal.envelopeStereo T (T (T VectorSize Real), T (T (T VectorSize Real)))
  (T (T (T VectorSize Real)))
-> T ((T (T VectorSize Real),
       (T (T VectorSize Real), T (T VectorSize Real))),
      ((T Real, T Real), (T Real, T (T Real))))
     (T (T VectorSize Real), T (T (T VectorSize Real)))
-> T ((T (T VectorSize Real),
       (T (T VectorSize Real), T (T VectorSize Real))),
      ((T Real, T Real), (T Real, T (T Real))))
     (T (T (T VectorSize Real)))
forall b c a. T b c -> T a b -> T a c
$&
                 T ((T (T VectorSize Real),
    (T (T VectorSize Real), T (T VectorSize Real))),
   ((T Real, T Real), (T Real, T (T Real))))
  (T (T VectorSize Real))
env T ((T (T VectorSize Real),
    (T (T VectorSize Real), T (T VectorSize Real))),
   ((T Real, T Real), (T Real, T (T Real))))
  (T (T VectorSize Real))
-> T ((T (T VectorSize Real),
       (T (T VectorSize Real), T (T VectorSize Real))),
      ((T Real, T Real), (T Real, T (T Real))))
     (T (T (T VectorSize Real)))
-> T ((T (T VectorSize Real),
       (T (T VectorSize Real), T (T VectorSize Real))),
      ((T Real, T Real), (T Real, T (T Real))))
     (T (T VectorSize Real), T (T (T VectorSize Real)))
forall a b c. T a b -> T a c -> T a (b, c)
&|&
                 (T (T (T VectorSize Real)) (T (T VectorSize Real))
-> T (T (T (T VectorSize Real))) (T (T (T VectorSize Real)))
forall a b.
(Phi a, Undefined a, Phi b, Undefined b) =>
T a b -> T (T a) (T b)
Causal.stereoFromMono
                    ((forall r.
 T (T VectorSize Real) -> CodeGenFunction r (T (T VectorSize Real)))
-> T (T (T VectorSize Real), T (T VectorSize Real))
     (T (T VectorSize Real))
forall n t y.
(Positive n, C t, Fraction t) =>
(forall r. Serial n t -> CodeGenFunction r y)
-> T (Serial n t, Serial n t) y
CausalPS.osci T (T VectorSize Real) -> CodeGenFunction r (T (T VectorSize Real))
forall r.
T (T VectorSize Real) -> CodeGenFunction r (T (T VectorSize Real))
forall a r.
(PseudoRing a, RationalConstant a, Real a) =>
a -> CodeGenFunction r a
WaveL.approxSine4 T (T (T VectorSize Real), T (T VectorSize Real))
  (T (T VectorSize Real))
-> SignalOf T (T (T VectorSize Real))
-> T (T (T VectorSize Real)) (T (T VectorSize Real))
forall (process :: * -> * -> *) a b c.
C process =>
process (a, b) c -> SignalOf process a -> process b c
$< SignalOf T (T (T VectorSize Real))
T (T (T VectorSize Real))
forall a. C a => a
zero)
                  T (T (T (T VectorSize Real))) (T (T (T VectorSize Real)))
-> T ((T (T VectorSize Real),
       (T (T VectorSize Real), T (T VectorSize Real))),
      ((T Real, T Real), (T Real, T (T Real))))
     (T (T (T VectorSize Real)))
-> T ((T (T VectorSize Real),
       (T (T VectorSize Real), T (T VectorSize Real))),
      ((T Real, T Real), (T Real, T (T Real))))
     (T (T (T VectorSize Real)))
forall b c a. T b c -> T a b -> T a c
$&
                  Exp Real
-> T (T (T (T VectorSize Real))) (T (T (T VectorSize Real)))
forall n a.
(Positive n, PseudoRing a) =>
Exp a -> T (T (Serial n a)) (T (Serial n a))
CausalPS.amplifyStereo Exp Real
n
                  T (T (T (T VectorSize Real))) (T (T (T VectorSize Real)))
-> T ((T (T VectorSize Real),
       (T (T VectorSize Real), T (T VectorSize Real))),
      ((T Real, T Real), (T Real, T (T Real))))
     (T (T (T VectorSize Real)))
-> T ((T (T VectorSize Real),
       (T (T VectorSize Real), T (T VectorSize Real))),
      ((T Real, T Real), (T Real, T (T Real))))
     (T (T (T VectorSize Real)))
forall b c a. T b c -> T a b -> T a c
$&
                  T ((T (T VectorSize Real),
    (T (T VectorSize Real), T (T VectorSize Real))),
   ((T Real, T Real), (T Real, T (T Real))))
  (T (T (T VectorSize Real)))
freqs)
          in T (T (T VectorSize Real)) -> T (T (T VectorSize Real))
forall a. T (T a) -> T (T a)
Stereo.multiValue (T (T (T VectorSize Real)) -> T (T (T VectorSize Real)))
-> T ((T (T VectorSize Real),
       (T (T VectorSize Real), T (T VectorSize Real))),
      ((T Real, T Real), (T Real, T (T Real))))
     (T (T (T VectorSize Real)))
-> T ((T (T VectorSize Real),
       (T (T VectorSize Real), T (T VectorSize Real))),
      ((T Real, T Real), (T Real, T (T Real))))
     (T (T (T VectorSize Real)))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$>
              (T (T (T VectorSize Real), T (T (T VectorSize Real)))
  (T (T (T VectorSize Real)))
forall a. PseudoRing a => T (a, T a) (T a)
Causal.envelopeStereo T (T (T VectorSize Real), T (T (T VectorSize Real)))
  (T (T (T VectorSize Real)))
-> T ((T (T VectorSize Real),
       (T (T VectorSize Real), T (T VectorSize Real))),
      ((T Real, T Real), (T Real, T (T Real))))
     (T (T VectorSize Real), T (T (T VectorSize Real)))
-> T ((T (T VectorSize Real),
       (T (T VectorSize Real), T (T VectorSize Real))),
      ((T Real, T Real), (T Real, T (T Real))))
     (T (T (T VectorSize Real)))
forall b c a. T b c -> T a b -> T a c
$&
                 (T ((T (T VectorSize Real),
    (T (T VectorSize Real), T (T VectorSize Real))),
   ((T Real, T Real), (T Real, T (T Real))))
  (T (T VectorSize Real))
noiseAmp T ((T (T VectorSize Real),
    (T (T VectorSize Real), T (T VectorSize Real))),
   ((T Real, T Real), (T Real, T (T Real))))
  (T (T VectorSize Real))
-> T ((T (T VectorSize Real),
       (T (T VectorSize Real), T (T VectorSize Real))),
      ((T Real, T Real), (T Real, T (T Real))))
     (T (T VectorSize Real))
-> T ((T (T VectorSize Real),
       (T (T VectorSize Real), T (T VectorSize Real))),
      ((T Real, T Real), (T Real, T (T Real))))
     (T (T VectorSize Real))
forall a. C a => a -> a -> a
* T ((T (T VectorSize Real),
    (T (T VectorSize Real), T (T VectorSize Real))),
   ((T Real, T Real), (T Real, T (T Real))))
  (T (T VectorSize Real))
env1)
                 T ((T (T VectorSize Real),
    (T (T VectorSize Real), T (T VectorSize Real))),
   ((T Real, T Real), (T Real, T (T Real))))
  (T (T VectorSize Real))
-> T ((T (T VectorSize Real),
       (T (T VectorSize Real), T (T VectorSize Real))),
      ((T Real, T Real), (T Real, T (T Real))))
     (T (T (T VectorSize Real)))
-> T ((T (T VectorSize Real),
       (T (T VectorSize Real), T (T VectorSize Real))),
      ((T Real, T Real), (T Real, T (T Real))))
     (T (T VectorSize Real), T (T (T VectorSize Real)))
forall a b c. T a b -> T a c -> T a (b, c)
&|&
                 (T ((T (T VectorSize Real),
     (T (T VectorSize Real), T (T VectorSize Real))),
    ((T Real, T Real), (T Real, T (T Real))))
   (T (T VectorSize Real))
 -> T ((T (T VectorSize Real),
        (T (T VectorSize Real), T (T VectorSize Real))),
       ((T Real, T Real), (T Real, T (T Real))))
      (T (T VectorSize Real)))
-> T ((T (T VectorSize Real),
       (T (T VectorSize Real), T (T VectorSize Real))),
      ((T Real, T Real), (T Real, T (T Real))))
     (T (T (T VectorSize Real)))
-> T ((T (T VectorSize Real),
       (T (T VectorSize Real), T (T VectorSize Real))),
      ((T Real, T Real), (T Real, T (T Real))))
     (T (T (T VectorSize Real)))
forall (f :: * -> *) a b.
Applicative f =>
(f a -> f b) -> f (T a) -> f (T b)
Stereo.liftApplicative
                    (\T ((T (T VectorSize Real),
    (T (T VectorSize Real), T (T VectorSize Real))),
   ((T Real, T Real), (T Real, T (T Real))))
  (T (T VectorSize Real))
freq ->
                       T (Parameter D8 (T Real), T (T VectorSize Real))
  (T (T VectorSize Real))
forall parameter a b. C parameter a b => T (parameter, a) b
CtrlPS.process T (Parameter D8 (T Real), T (T VectorSize Real))
  (T (T VectorSize Real))
-> T ((T (T VectorSize Real),
       (T (T VectorSize Real), T (T VectorSize Real))),
      ((T Real, T Real), (T Real, T (T Real))))
     (Parameter D8 (T Real), T (T VectorSize Real))
-> T ((T (T VectorSize Real),
       (T (T VectorSize Real), T (T VectorSize Real))),
      ((T Real, T Real), (T Real, T (T Real))))
     (T (T VectorSize Real))
forall b c a. T b c -> T a b -> T a c
$&
                          (T (T Real, T Real) (Parameter D8 (T Real))
noiseParam T (T Real, T Real) (Parameter D8 (T Real))
-> T ((T (T VectorSize Real),
       (T (T VectorSize Real), T (T VectorSize Real))),
      ((T Real, T Real), (T Real, T (T Real))))
     (T Real, T Real)
-> T ((T (T VectorSize Real),
       (T (T VectorSize Real), T (T VectorSize Real))),
      ((T Real, T Real), (T Real, T (T Real))))
     (Parameter D8 (T Real))
forall b c a. T b c -> T a b -> T a c
$& T ((T (T VectorSize Real),
    (T (T VectorSize Real), T (T VectorSize Real))),
   ((T Real, T Real), (T Real, T (T Real))))
  (T Real)
noiseReson T ((T (T VectorSize Real),
    (T (T VectorSize Real), T (T VectorSize Real))),
   ((T Real, T Real), (T Real, T (T Real))))
  (T Real)
-> T ((T (T VectorSize Real),
       (T (T VectorSize Real), T (T VectorSize Real))),
      ((T Real, T Real), (T Real, T (T Real))))
     (T Real)
-> T ((T (T VectorSize Real),
       (T (T VectorSize Real), T (T VectorSize Real))),
      ((T Real, T Real), (T Real, T (T Real))))
     (T Real, T Real)
forall a b c. T a b -> T a c -> T a (b, c)
&|&
                           ((Exp (T VectorSize Real) -> Exp Real)
-> T (T (T VectorSize Real)) (T Real)
forall ae a be b.
(Aggregate ae a, Aggregate be b) =>
(ae -> be) -> T a b
Causal.map Exp (T VectorSize Real) -> Exp Real
forall n a. (Positive n, C a) => Exp (T n a) -> Exp a
Serial.subsample T (T (T VectorSize Real)) (T Real)
-> T ((T (T VectorSize Real),
       (T (T VectorSize Real), T (T VectorSize Real))),
      ((T Real, T Real), (T Real, T (T Real))))
     (T (T VectorSize Real))
-> T ((T (T VectorSize Real),
       (T (T VectorSize Real), T (T VectorSize Real))),
      ((T Real, T Real), (T Real, T (T Real))))
     (T Real)
forall b c a. T b c -> T a b -> T a c
$& T ((T (T VectorSize Real),
    (T (T VectorSize Real), T (T VectorSize Real))),
   ((T Real, T Real), (T Real, T (T Real))))
  (T (T VectorSize Real))
freq))
                          T ((T (T VectorSize Real),
    (T (T VectorSize Real), T (T VectorSize Real))),
   ((T Real, T Real), (T Real, T (T Real))))
  (Parameter D8 (T Real))
-> T ((T (T VectorSize Real),
       (T (T VectorSize Real), T (T VectorSize Real))),
      ((T Real, T Real), (T Real, T (T Real))))
     (T (T VectorSize Real))
-> T ((T (T VectorSize Real),
       (T (T VectorSize Real), T (T VectorSize Real))),
      ((T Real, T Real), (T Real, T (T Real))))
     (Parameter D8 (T Real), T (T VectorSize Real))
forall a b c. T a b -> T a c -> T a (b, c)
&|&
                          T ((T (T VectorSize Real),
    (T (T VectorSize Real), T (T VectorSize Real))),
   ((T Real, T Real), (T Real, T (T Real))))
  (T (T VectorSize Real))
forall {inp}. T inp (T (T VectorSize Real))
noise)
                    T ((T (T VectorSize Real),
    (T (T VectorSize Real), T (T VectorSize Real))),
   ((T Real, T Real), (T Real, T (T Real))))
  (T (T (T VectorSize Real)))
freqs)
              T ((T (T VectorSize Real),
    (T (T VectorSize Real), T (T VectorSize Real))),
   ((T Real, T Real), (T Real, T (T Real))))
  (T (T (T VectorSize Real)))
-> T ((T (T VectorSize Real),
       (T (T VectorSize Real), T (T VectorSize Real))),
      ((T Real, T Real), (T Real, T (T Real))))
     (T (T (T VectorSize Real)))
-> T ((T (T VectorSize Real),
       (T (T VectorSize Real), T (T VectorSize Real))),
      ((T Real, T Real), (T Real, T (T Real))))
     (T (T (T VectorSize Real)))
forall a. C a => a -> a -> a
+ Exp Real
-> T ((T (T VectorSize Real),
       (T (T VectorSize Real), T (T VectorSize Real))),
      ((T Real, T Real), (T Real, T (T Real))))
     (T (T VectorSize Real))
-> Exp Real
-> T ((T (T VectorSize Real),
       (T (T VectorSize Real), T (T VectorSize Real))),
      ((T Real, T Real), (T Real, T (T Real))))
     (T (T (T VectorSize Real)))
osci Exp Real
1.00 T ((T (T VectorSize Real),
    (T (T VectorSize Real), T (T VectorSize Real))),
   ((T Real, T Real), (T Real, T (T Real))))
  (T (T VectorSize Real))
env1 Exp Real
1
              T ((T (T VectorSize Real),
    (T (T VectorSize Real), T (T VectorSize Real))),
   ((T Real, T Real), (T Real, T (T Real))))
  (T (T (T VectorSize Real)))
-> T ((T (T VectorSize Real),
       (T (T VectorSize Real), T (T VectorSize Real))),
      ((T Real, T Real), (T Real, T (T Real))))
     (T (T (T VectorSize Real)))
-> T ((T (T VectorSize Real),
       (T (T VectorSize Real), T (T VectorSize Real))),
      ((T Real, T Real), (T Real, T (T Real))))
     (T (T (T VectorSize Real)))
forall a. C a => a -> a -> a
+ Exp Real
-> T ((T (T VectorSize Real),
       (T (T VectorSize Real), T (T VectorSize Real))),
      ((T Real, T Real), (T Real, T (T Real))))
     (T (T VectorSize Real))
-> Exp Real
-> T ((T (T VectorSize Real),
       (T (T VectorSize Real), T (T VectorSize Real))),
      ((T Real, T Real), (T Real, T (T Real))))
     (T (T (T VectorSize Real)))
osci Exp Real
0.10 T ((T (T VectorSize Real),
    (T (T VectorSize Real), T (T VectorSize Real))),
   ((T Real, T Real), (T Real, T (T Real))))
  (T (T VectorSize Real))
env4 Exp Real
4
              T ((T (T VectorSize Real),
    (T (T VectorSize Real), T (T VectorSize Real))),
   ((T Real, T Real), (T Real, T (T Real))))
  (T (T (T VectorSize Real)))
-> T ((T (T VectorSize Real),
       (T (T VectorSize Real), T (T VectorSize Real))),
      ((T Real, T Real), (T Real, T (T Real))))
     (T (T (T VectorSize Real)))
-> T ((T (T VectorSize Real),
       (T (T VectorSize Real), T (T VectorSize Real))),
      ((T Real, T Real), (T Real, T (T Real))))
     (T (T (T VectorSize Real)))
forall a. C a => a -> a -> a
+ Exp Real
-> T ((T (T VectorSize Real),
       (T (T VectorSize Real), T (T VectorSize Real))),
      ((T Real, T Real), (T Real, T (T Real))))
     (T (T VectorSize Real))
-> Exp Real
-> T ((T (T VectorSize Real),
       (T (T VectorSize Real), T (T VectorSize Real))),
      ((T Real, T Real), (T Real, T (T Real))))
     (T (T (T VectorSize Real)))
osci Exp Real
0.01 T ((T (T VectorSize Real),
    (T (T VectorSize Real), T (T VectorSize Real))),
   ((T Real, T Real), (T Real, T (T Real))))
  (T (T VectorSize Real))
env7 Exp Real
7))
      (Maybe Real
-> IO (SampleRate Real -> Real -> T EnvelopeControl Chunk)
pingControlledEnvelope (Real -> Maybe Real
forall a. a -> Maybe a
Just Real
0.01))
      (Maybe Real
-> IO (SampleRate Real -> Real -> T EnvelopeControl Chunk)
pingControlledEnvelope Maybe Real
forall a. Maybe a
Nothing)



stringControlledEnvelope ::
   IO (SampleRate Real -> Real ->
       PIO.T EnvelopeControl Chunk)
stringControlledEnvelope :: IO (SampleRate Real -> Real -> T EnvelopeControl Chunk)
stringControlledEnvelope =
   ((SampleRate Real
  -> Real
  -> T (T ShortStrictTime (ParameterPacked (T VectorSize Real)))
       Chunk)
 -> (SampleRate Real
     -> Real
     -> T (T ShortStrictTime (ParameterPacked (T VectorSize Real)))
          Chunk)
 -> (SampleRate Real
     -> Real
     -> T (T ShortStrictTime (ParameterPacked (T VectorSize Real)))
          Chunk)
 -> SampleRate Real
 -> Real
 -> T EnvelopeControl Chunk)
-> IO
     (SampleRate Real
      -> Real
      -> T (T ShortStrictTime (ParameterPacked (T VectorSize Real)))
           Chunk)
-> IO
     (SampleRate Real
      -> Real
      -> T (T ShortStrictTime (ParameterPacked (T VectorSize Real)))
           Chunk)
-> IO
     (SampleRate Real
      -> Real
      -> T (T ShortStrictTime (ParameterPacked (T VectorSize Real)))
           Chunk)
-> IO (SampleRate Real -> Real -> T EnvelopeControl Chunk)
forall (f :: * -> *) a b c d.
Applicative f =>
(a -> b -> c -> d) -> f a -> f b -> f c -> f d
liftA3
      (\SampleRate Real
-> Real
-> T (T ShortStrictTime (ParameterPacked (T VectorSize Real)))
     Chunk
attack SampleRate Real
-> Real
-> T (T ShortStrictTime (ParameterPacked (T VectorSize Real)))
     Chunk
sustain SampleRate Real
-> Real
-> T (T ShortStrictTime (ParameterPacked (T VectorSize Real)))
     Chunk
release SampleRate Real
sr Real
vel ->
         let amp :: Real
amp = Real -> Real
forall a. C a => a -> a
amplitudeFromVelocity Real
vel
         in  T EnvelopeControl Chunk
-> (Real -> T EnvelopeControl Chunk) -> T EnvelopeControl Chunk
forall a b n.
(Transform a, Vector b, Positive n) =>
T a (Vector (T n b))
-> (b -> T a (Vector (T n b))) -> T a (Vector (T n b))
PSt.continuePacked
                ((SampleRate Real
-> Real
-> T (T ShortStrictTime (ParameterPacked (T VectorSize Real)))
     Chunk
attack SampleRate Real
sr Real
amp T (T ShortStrictTime (ParameterPacked (T VectorSize Real))) Chunk
-> T (T ShortStrictTime (ParameterPacked (T VectorSize Real)))
     Chunk
-> T (T ShortStrictTime (ParameterPacked (T VectorSize Real)))
     Chunk
forall a. Semigroup a => a -> a -> a
<>
                  {- we could also feed the sustain process
                     with a signal with sample type () -}
                  SampleRate Real
-> Real
-> T (T ShortStrictTime (ParameterPacked (T VectorSize Real)))
     Chunk
sustain SampleRate Real
sr Real
amp)
                 T (T ShortStrictTime (ParameterPacked (T VectorSize Real))) Chunk
-> T EnvelopeControl
     (T ShortStrictTime (ParameterPacked (T VectorSize Real)))
-> T EnvelopeControl Chunk
forall b c a. T b c -> T a b -> T a c
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
.
                 T (T GateChunk
     (T ShortStrictTime (ParameterPacked (T VectorSize Real))))
  (T ShortStrictTime (ParameterPacked (T VectorSize Real)))
forall signal a. Transform signal => T (T (Chunk a) signal) signal
Gate.shorten
                 T (T GateChunk
     (T ShortStrictTime (ParameterPacked (T VectorSize Real))))
  (T ShortStrictTime (ParameterPacked (T VectorSize Real)))
-> T EnvelopeControl
     (T GateChunk
        (T ShortStrictTime (ParameterPacked (T VectorSize Real))))
-> T EnvelopeControl
     (T ShortStrictTime (ParameterPacked (T VectorSize Real)))
forall b c a. T b c -> T a b -> T a c
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
.
                 T (T (Control Time) (Control Time))
  (T ShortStrictTime (ParameterPacked (T VectorSize Real)))
-> T EnvelopeControl
     (T GateChunk
        (T ShortStrictTime (ParameterPacked (T VectorSize Real))))
forall (arrow :: * -> * -> *) a b c.
Arrow arrow =>
arrow a b -> arrow (T c a) (T c b)
Zip.arrowSecond ((T (Control Time) (Control Time)
 -> T ShortStrictTime (ParameterPacked (T VectorSize Real)))
-> T (T (Control Time) (Control Time))
     (T ShortStrictTime (ParameterPacked (T VectorSize Real)))
forall b c. (b -> c) -> T b c
forall (a :: * -> * -> *) b c. Arrow a => (b -> c) -> a b c
arr (SampleRate Real
-> Control Time
-> T ShortStrictTime (ParameterPacked (T VectorSize Real))
forall (f :: * -> *).
Functor f =>
SampleRate Real
-> f Time -> f (ParameterPacked (T VectorSize Real))
halfLifeControl SampleRate Real
sr (Control Time
 -> T ShortStrictTime (ParameterPacked (T VectorSize Real)))
-> (T (Control Time) (Control Time) -> Control Time)
-> T (Control Time) (Control Time)
-> T ShortStrictTime (ParameterPacked (T VectorSize Real))
forall b c a. (b -> c) -> (a -> b) -> a -> c
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. T (Control Time) (Control Time) -> Control Time
forall a b. T a b -> a
Zip.first)))
                (\Real
y ->
                 SampleRate Real
-> Real
-> T (T ShortStrictTime (ParameterPacked (T VectorSize Real)))
     Chunk
release SampleRate Real
sr Real
y
                 T (T ShortStrictTime (ParameterPacked (T VectorSize Real))) Chunk
-> (EnvelopeControl
    -> T ShortStrictTime (ParameterPacked (T VectorSize Real)))
-> T EnvelopeControl Chunk
forall (a :: * -> * -> *) c d b.
Arrow a =>
a c d -> (b -> c) -> a b d
<<^
                 SampleRate Real
-> Control Time
-> T ShortStrictTime (ParameterPacked (T VectorSize Real))
forall (f :: * -> *).
Functor f =>
SampleRate Real
-> f Time -> f (ParameterPacked (T VectorSize Real))
halfLifeControl SampleRate Real
sr (Control Time
 -> T ShortStrictTime (ParameterPacked (T VectorSize Real)))
-> (EnvelopeControl -> Control Time)
-> EnvelopeControl
-> T ShortStrictTime (ParameterPacked (T VectorSize Real))
forall b c a. (b -> c) -> (a -> b) -> a -> c
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. T (Control Time) (Control Time) -> Control Time
forall a b. T a b -> b
Zip.second (T (Control Time) (Control Time) -> Control Time)
-> (EnvelopeControl -> T (Control Time) (Control Time))
-> EnvelopeControl
-> Control Time
forall b c a. (b -> c) -> (a -> b) -> a -> c
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. EnvelopeControl -> T (Control Time) (Control Time)
forall a b. T a b -> b
Zip.second))
      (DSL
  (SampleRate Real
   -> Real
   -> T (T ShortStrictTime (ParameterPacked (T VectorSize Real)))
        Chunk)
  (Element
     (In
        (SampleRate Real
         -> Real
         -> T (T ShortStrictTime (ParameterPacked (T VectorSize Real)))
              Chunk)))
  (Element
     (Out
        (SampleRate Real
         -> Real
         -> T (T ShortStrictTime (ParameterPacked (T VectorSize Real)))
              Chunk)))
-> IO
     (SampleRate Real
      -> Real
      -> T (T ShortStrictTime (ParameterPacked (T VectorSize Real)))
           Chunk)
forall f a al b bl.
(Run f, In f ~ a, Default a, Element a ~ al, Out f ~ b, Default b,
 Element b ~ bl) =>
DSL f al bl -> IO f
CausalRender.run (DSL
   (SampleRate Real
    -> Real
    -> T (T ShortStrictTime (ParameterPacked (T VectorSize Real)))
         Chunk)
   (Element
      (In
         (SampleRate Real
          -> Real
          -> T (T ShortStrictTime (ParameterPacked (T VectorSize Real)))
               Chunk)))
   (Element
      (Out
         (SampleRate Real
          -> Real
          -> T (T ShortStrictTime (ParameterPacked (T VectorSize Real)))
               Chunk)))
 -> IO
      (SampleRate Real
       -> Real
       -> T (T ShortStrictTime (ParameterPacked (T VectorSize Real)))
            Chunk))
-> DSL
     (SampleRate Real
      -> Real
      -> T (T ShortStrictTime (ParameterPacked (T VectorSize Real)))
           Chunk)
     (Element
        (In
           (SampleRate Real
            -> Real
            -> T (T ShortStrictTime (ParameterPacked (T VectorSize Real)))
                 Chunk)))
     (Element
        (Out
           (SampleRate Real
            -> Real
            -> T (T ShortStrictTime (ParameterPacked (T VectorSize Real)))
                 Chunk)))
-> IO
     (SampleRate Real
      -> Real
      -> T (T ShortStrictTime (ParameterPacked (T VectorSize Real)))
           Chunk)
forall a b. (a -> b) -> a -> b
$
       (Arg Number (Exp Real)
 -> SampleRate (Exp Real)
 -> T (T (ParameterPacked (T VectorSize Real)))
      (T (T VectorSize Real)))
-> SampleRate (Exp Real)
-> Unwrapped
     (Arg Number (Exp Real)
      -> SampleRate (Exp Real)
      -> T (T (ParameterPacked (T VectorSize Real)))
           (T (T VectorSize Real)))
forall a f. Wrapped a f => f -> SampleRate a -> Unwrapped f
wrapped ((Arg Number (Exp Real)
  -> SampleRate (Exp Real)
  -> T (T (ParameterPacked (T VectorSize Real)))
       (T (T VectorSize Real)))
 -> SampleRate (Exp Real)
 -> Unwrapped
      (Arg Number (Exp Real)
       -> SampleRate (Exp Real)
       -> T (T (ParameterPacked (T VectorSize Real)))
            (T (T VectorSize Real))))
-> (Arg Number (Exp Real)
    -> SampleRate (Exp Real)
    -> T (T (ParameterPacked (T VectorSize Real)))
         (T (T VectorSize Real)))
-> SampleRate (Exp Real)
-> Unwrapped
     (Arg Number (Exp Real)
      -> SampleRate (Exp Real)
      -> T (T (ParameterPacked (T VectorSize Real)))
           (T (T VectorSize Real)))
forall a b. (a -> b) -> a -> b
$ \(Number Exp Real
amp) (SampleRate Exp Real
_sr) ->
             SignalOf T (T (T VectorSize Real))
-> T (ParameterPacked (T (T VectorSize Real)))
     (T (T VectorSize Real))
forall b a. SignalOf T b -> T a b
forall (process :: * -> * -> *) b a.
C process =>
SignalOf process b -> process a b
Causal.fromSignal (Exp Real -> T (T (T VectorSize Real))
forall n a. Vector n a => Exp a -> T (Serial n a)
SigPS.constant Exp Real
amp)
             T (ParameterPacked (T (T VectorSize Real))) (T (T VectorSize Real))
-> T (ParameterPacked (T (T VectorSize Real)))
     (T (T VectorSize Real))
-> T (ParameterPacked (T (T VectorSize Real)))
     (T (T VectorSize Real))
forall a. C a => a -> a -> a
-
             Exp Real -> T (T (T VectorSize Real)) (T (T VectorSize Real))
takeThreshold Exp Real
1e-4
             T (T (T VectorSize Real)) (T (T VectorSize Real))
-> T (ParameterPacked (T (T VectorSize Real)))
     (T (T VectorSize Real))
-> T (ParameterPacked (T (T VectorSize Real)))
     (T (T VectorSize Real))
forall b c a. T b c -> T a b -> T a c
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
.
             Exp Real
-> T (ParameterPacked (T (T VectorSize Real)))
     (T (T VectorSize Real))
forall a n.
(PseudoRing a, IntegerConstant a, Positive n, Vector n a, C a) =>
Exp a -> T (ParameterPacked (Value n a)) (Value n a)
Exp.causalPacked Exp Real
amp T (ParameterPacked (T (T VectorSize Real))) (T (T VectorSize Real))
-> (T (ParameterPacked (T VectorSize Real))
    -> ParameterPacked (T (T VectorSize Real)))
-> T (T (ParameterPacked (T VectorSize Real)))
     (T (T VectorSize Real))
forall (a :: * -> * -> *) c d b.
Arrow a =>
a c d -> (b -> c) -> a b d
<<^ T (ParameterPacked (T VectorSize Real))
-> ParameterPacked (T (T VectorSize Real))
forall a. T (ParameterPacked a) -> ParameterPacked (T a)
Exp.unMultiValueParameterPacked)
      (DSL
  (SampleRate Real
   -> Real
   -> T (T ShortStrictTime (ParameterPacked (T VectorSize Real)))
        Chunk)
  (Element
     (In
        (SampleRate Real
         -> Real
         -> T (T ShortStrictTime (ParameterPacked (T VectorSize Real)))
              Chunk)))
  (Element
     (Out
        (SampleRate Real
         -> Real
         -> T (T ShortStrictTime (ParameterPacked (T VectorSize Real)))
              Chunk)))
-> IO
     (SampleRate Real
      -> Real
      -> T (T ShortStrictTime (ParameterPacked (T VectorSize Real)))
           Chunk)
forall f a al b bl.
(Run f, In f ~ a, Default a, Element a ~ al, Out f ~ b, Default b,
 Element b ~ bl) =>
DSL f al bl -> IO f
CausalRender.run (DSL
   (SampleRate Real
    -> Real
    -> T (T ShortStrictTime (ParameterPacked (T VectorSize Real)))
         Chunk)
   (Element
      (In
         (SampleRate Real
          -> Real
          -> T (T ShortStrictTime (ParameterPacked (T VectorSize Real)))
               Chunk)))
   (Element
      (Out
         (SampleRate Real
          -> Real
          -> T (T ShortStrictTime (ParameterPacked (T VectorSize Real)))
               Chunk)))
 -> IO
      (SampleRate Real
       -> Real
       -> T (T ShortStrictTime (ParameterPacked (T VectorSize Real)))
            Chunk))
-> DSL
     (SampleRate Real
      -> Real
      -> T (T ShortStrictTime (ParameterPacked (T VectorSize Real)))
           Chunk)
     (Element
        (In
           (SampleRate Real
            -> Real
            -> T (T ShortStrictTime (ParameterPacked (T VectorSize Real)))
                 Chunk)))
     (Element
        (Out
           (SampleRate Real
            -> Real
            -> T (T ShortStrictTime (ParameterPacked (T VectorSize Real)))
                 Chunk)))
-> IO
     (SampleRate Real
      -> Real
      -> T (T ShortStrictTime (ParameterPacked (T VectorSize Real)))
           Chunk)
forall a b. (a -> b) -> a -> b
$
       (Arg Number (Exp Real)
 -> SampleRate (Exp Real)
 -> T (T (ParameterPacked (T VectorSize Real)))
      (T (T VectorSize Real)))
-> SampleRate (Exp Real)
-> Unwrapped
     (Arg Number (Exp Real)
      -> SampleRate (Exp Real)
      -> T (T (ParameterPacked (T VectorSize Real)))
           (T (T VectorSize Real)))
forall a f. Wrapped a f => f -> SampleRate a -> Unwrapped f
wrapped ((Arg Number (Exp Real)
  -> SampleRate (Exp Real)
  -> T (T (ParameterPacked (T VectorSize Real)))
       (T (T VectorSize Real)))
 -> SampleRate (Exp Real)
 -> Unwrapped
      (Arg Number (Exp Real)
       -> SampleRate (Exp Real)
       -> T (T (ParameterPacked (T VectorSize Real)))
            (T (T VectorSize Real))))
-> (Arg Number (Exp Real)
    -> SampleRate (Exp Real)
    -> T (T (ParameterPacked (T VectorSize Real)))
         (T (T VectorSize Real)))
-> SampleRate (Exp Real)
-> Unwrapped
     (Arg Number (Exp Real)
      -> SampleRate (Exp Real)
      -> T (T (ParameterPacked (T VectorSize Real)))
           (T (T VectorSize Real)))
forall a b. (a -> b) -> a -> b
$ \(Number Exp Real
amp) (SampleRate Exp Real
_sr) ->
             SignalOf T (T (T VectorSize Real))
-> T (T (ParameterPacked (T VectorSize Real)))
     (T (T VectorSize Real))
forall b a. SignalOf T b -> T a b
forall (process :: * -> * -> *) b a.
C process =>
SignalOf process b -> process a b
Causal.fromSignal (Exp Real -> T (T (T VectorSize Real))
forall n a. Vector n a => Exp a -> T (Serial n a)
SigPS.constant Exp Real
amp))
      (DSL
  (SampleRate Real
   -> Real
   -> T (T ShortStrictTime (ParameterPacked (T VectorSize Real)))
        Chunk)
  (Element
     (In
        (SampleRate Real
         -> Real
         -> T (T ShortStrictTime (ParameterPacked (T VectorSize Real)))
              Chunk)))
  (Element
     (Out
        (SampleRate Real
         -> Real
         -> T (T ShortStrictTime (ParameterPacked (T VectorSize Real)))
              Chunk)))
-> IO
     (SampleRate Real
      -> Real
      -> T (T ShortStrictTime (ParameterPacked (T VectorSize Real)))
           Chunk)
forall f a al b bl.
(Run f, In f ~ a, Default a, Element a ~ al, Out f ~ b, Default b,
 Element b ~ bl) =>
DSL f al bl -> IO f
CausalRender.run (DSL
   (SampleRate Real
    -> Real
    -> T (T ShortStrictTime (ParameterPacked (T VectorSize Real)))
         Chunk)
   (Element
      (In
         (SampleRate Real
          -> Real
          -> T (T ShortStrictTime (ParameterPacked (T VectorSize Real)))
               Chunk)))
   (Element
      (Out
         (SampleRate Real
          -> Real
          -> T (T ShortStrictTime (ParameterPacked (T VectorSize Real)))
               Chunk)))
 -> IO
      (SampleRate Real
       -> Real
       -> T (T ShortStrictTime (ParameterPacked (T VectorSize Real)))
            Chunk))
-> DSL
     (SampleRate Real
      -> Real
      -> T (T ShortStrictTime (ParameterPacked (T VectorSize Real)))
           Chunk)
     (Element
        (In
           (SampleRate Real
            -> Real
            -> T (T ShortStrictTime (ParameterPacked (T VectorSize Real)))
                 Chunk)))
     (Element
        (Out
           (SampleRate Real
            -> Real
            -> T (T ShortStrictTime (ParameterPacked (T VectorSize Real)))
                 Chunk)))
-> IO
     (SampleRate Real
      -> Real
      -> T (T ShortStrictTime (ParameterPacked (T VectorSize Real)))
           Chunk)
forall a b. (a -> b) -> a -> b
$
       (Arg Number (Exp Real)
 -> SampleRate (Exp Real)
 -> T (T (ParameterPacked (T VectorSize Real)))
      (T (T VectorSize Real)))
-> SampleRate (Exp Real)
-> Unwrapped
     (Arg Number (Exp Real)
      -> SampleRate (Exp Real)
      -> T (T (ParameterPacked (T VectorSize Real)))
           (T (T VectorSize Real)))
forall a f. Wrapped a f => f -> SampleRate a -> Unwrapped f
wrapped ((Arg Number (Exp Real)
  -> SampleRate (Exp Real)
  -> T (T (ParameterPacked (T VectorSize Real)))
       (T (T VectorSize Real)))
 -> SampleRate (Exp Real)
 -> Unwrapped
      (Arg Number (Exp Real)
       -> SampleRate (Exp Real)
       -> T (T (ParameterPacked (T VectorSize Real)))
            (T (T VectorSize Real))))
-> (Arg Number (Exp Real)
    -> SampleRate (Exp Real)
    -> T (T (ParameterPacked (T VectorSize Real)))
         (T (T VectorSize Real)))
-> SampleRate (Exp Real)
-> Unwrapped
     (Arg Number (Exp Real)
      -> SampleRate (Exp Real)
      -> T (T (ParameterPacked (T VectorSize Real)))
           (T (T VectorSize Real)))
forall a b. (a -> b) -> a -> b
$ \(Number Exp Real
level) (SampleRate Exp Real
_sr) ->
             Exp Real -> T (T (T VectorSize Real)) (T (T VectorSize Real))
takeThreshold Exp Real
0.01
             T (T (T VectorSize Real)) (T (T VectorSize Real))
-> T (ParameterPacked (T (T VectorSize Real)))
     (T (T VectorSize Real))
-> T (ParameterPacked (T (T VectorSize Real)))
     (T (T VectorSize Real))
forall b c a. T b c -> T a b -> T a c
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
.
             Exp Real
-> T (ParameterPacked (T (T VectorSize Real)))
     (T (T VectorSize Real))
forall a n.
(PseudoRing a, IntegerConstant a, Positive n, Vector n a, C a) =>
Exp a -> T (ParameterPacked (Value n a)) (Value n a)
Exp.causalPacked Exp Real
level T (ParameterPacked (T (T VectorSize Real))) (T (T VectorSize Real))
-> (T (ParameterPacked (T VectorSize Real))
    -> ParameterPacked (T (T VectorSize Real)))
-> T (T (ParameterPacked (T VectorSize Real)))
     (T (T VectorSize Real))
forall (a :: * -> * -> *) c d b.
Arrow a =>
a c d -> (b -> c) -> a b d
<<^ T (ParameterPacked (T VectorSize Real))
-> ParameterPacked (T (T VectorSize Real))
forall a. T (ParameterPacked a) -> ParameterPacked (T a)
Exp.unMultiValueParameterPacked)


windCore ::
   F.T a (MultiValue.T Real) ->
   F.T a (MultiValue.T (BM.T Real)) ->
   SampleRate (Exp Real) ->
   F.T a (Stereo.T VectorValue)
windCore :: forall a.
T a (T Real)
-> T a (T (T Real))
-> SampleRate (Exp Real)
-> T a (T (T (T VectorSize Real)))
windCore T a (T Real)
reson T a (T (T Real))
fm =
   (SampleRate (Exp Real) -> Exp Real -> Exp Real)
-> Exp Real
-> (Exp Real
    -> SampleRate (Exp Real) -> T a (T (T (T VectorSize Real))))
-> SampleRate (Exp Real)
-> T a (T (T (T VectorSize Real)))
forall a b c d.
(SampleRate a -> b -> c)
-> b -> (c -> SampleRate a -> d) -> SampleRate a -> d
constant SampleRate (Exp Real) -> Exp Real -> Exp Real
forall a. C a => SampleRate a -> a -> a
frequency Exp Real
0.2 ((Exp Real
  -> SampleRate (Exp Real) -> T a (T (T (T VectorSize Real))))
 -> SampleRate (Exp Real) -> T a (T (T (T VectorSize Real))))
-> (Exp Real
    -> SampleRate (Exp Real) -> T a (T (T (T VectorSize Real))))
-> SampleRate (Exp Real)
-> T a (T (T (T VectorSize Real)))
forall a b. (a -> b) -> a -> b
$ \Exp Real
speed SampleRate (Exp Real)
sr ->
   let modu :: T a (T Real)
modu =
          (Exp (T VectorSize Real) -> Exp Real)
-> T (T (T VectorSize Real)) (T Real)
forall ae a be b.
(Aggregate ae a, Aggregate be b) =>
(ae -> be) -> T a b
Causal.map Exp (T VectorSize Real) -> Exp Real
forall n a. (Positive n, C a) => Exp (T n a) -> Exp a
Serial.subsample T (T (T VectorSize Real)) (T Real)
-> T a (T (T VectorSize Real)) -> T a (T Real)
forall b c a. T b c -> T a b -> T a c
$&
          ((T (T VectorSize Real) -> T (T VectorSize Real))
-> T a (T (T VectorSize Real)) -> T a (T (T VectorSize Real))
forall a b. (a -> b) -> T a a -> T a b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (T (T VectorSize Real)
-> T (T VectorSize Real) -> T (T VectorSize Real)
forall a. a -> a -> a
`asTypeOf` (T (T VectorSize Real)
forall a. HasCallStack => a
undefined :: VectorValue)) (T a (T (T VectorSize Real)) -> T a (T (T VectorSize Real)))
-> T a (T (T VectorSize Real)) -> T a (T (T VectorSize Real))
forall a b. (a -> b) -> a -> b
$
           Exp Real -> T a (T (T Real)) -> T a (T (T VectorSize Real))
forall inp.
Exp Real -> T inp (T (T Real)) -> T inp (T (T VectorSize Real))
frequencyFromBendModulationPacked Exp Real
speed T a (T (T Real))
fm)
   in  T (Parameter D8 (MultiValuesOf (Exp Real)), T (T VectorSize Real))
  (T (T VectorSize Real))
-> T (Parameter D8 (MultiValuesOf (Exp Real)),
      T (T (T VectorSize Real)))
     (T (T (T VectorSize Real)))
forall a b c.
(Phi a, Phi b, Phi c, Undefined a, Undefined b, Undefined c) =>
T (c, a) b -> T (c, T a) (T b)
Causal.stereoFromMonoControlled T (Parameter D8 (MultiValuesOf (Exp Real)), T (T VectorSize Real))
  (T (T VectorSize Real))
forall parameter a b. C parameter a b => T (parameter, a) b
CtrlPS.process T (Parameter D8 (MultiValuesOf (Exp Real)),
   T (T (T VectorSize Real)))
  (T (T (T VectorSize Real)))
-> T a
     (Parameter D8 (MultiValuesOf (Exp Real)),
      T (T (T VectorSize Real)))
-> T a (T (T (T VectorSize Real)))
forall b c a. T b c -> T a b -> T a c
$&
          ((Exp Real -> Exp Real -> Parameter D8 (Exp Real))
-> T (T Real, T Real) (Parameter D8 (MultiValuesOf (Exp Real)))
forall ae a be b ce c.
(Aggregate ae a, Aggregate be b, Aggregate ce c) =>
(ae -> be -> ce) -> T (a, b) c
Causal.zipWith (Proxy D8 -> Exp Real -> Exp Real -> Parameter D8 (Exp Real)
forall n a. (Natural n, C a) => Proxy n -> a -> a -> Parameter n a
Moog.parameter Proxy D8
TypeNum.d8) T (T Real, T Real) (Parameter D8 (MultiValuesOf (Exp Real)))
-> T a (T Real, T Real)
-> T a (Parameter D8 (MultiValuesOf (Exp Real)))
forall b c a. T b c -> T a b -> T a c
$&  T a (T Real)
reson T a (T Real) -> T a (T Real) -> T a (T Real, T Real)
forall a b c. T a b -> T a c -> T a (b, c)
&|& T a (T Real)
modu)
          T a (Parameter D8 (MultiValuesOf (Exp Real)))
-> T a (T (T (T VectorSize Real)))
-> T a
     (Parameter D8 (MultiValuesOf (Exp Real)),
      T (T (T VectorSize Real)))
forall a b c. T a b -> T a c -> T a (b, c)
&|&
          T (T (T (T VectorSize Real))) -> T a (T (T (T VectorSize Real)))
forall out inp. T out -> T inp out
F.fromSignal (SampleRate (Exp Real) -> T (T (T (T VectorSize Real)))
stereoNoise SampleRate (Exp Real)
sr)

wind ::
   IO (SampleRate Real -> Real -> Real ->
       PIO.T
          (WithEnvelopeControl DetuneBendModControl)
          StereoChunk)
wind :: IO
  (SampleRate Real
   -> Real
   -> Real
   -> T (WithEnvelopeControl DetuneBendModControl) StereoChunk)
wind =
   ((SampleRate Real -> T (T Chunk DetuneBendModControl) StereoChunk)
 -> (SampleRate Real -> Real -> T EnvelopeControl Chunk)
 -> SampleRate Real
 -> Real
 -> Real
 -> T (WithEnvelopeControl DetuneBendModControl) StereoChunk)
-> IO
     (SampleRate Real -> T (T Chunk DetuneBendModControl) StereoChunk)
-> IO (SampleRate Real -> Real -> T EnvelopeControl Chunk)
-> IO
     (SampleRate Real
      -> Real
      -> Real
      -> T (WithEnvelopeControl DetuneBendModControl) StereoChunk)
forall a b c. (a -> b -> c) -> IO a -> IO b -> IO c
forall (f :: * -> *) a b c.
Applicative f =>
(a -> b -> c) -> f a -> f b -> f c
liftA2
      (\SampleRate Real -> T (T Chunk DetuneBendModControl) StereoChunk
osc SampleRate Real -> Real -> T EnvelopeControl Chunk
env SampleRate Real
sr Real
vel Real
freq ->
         SampleRate Real -> T (T Chunk DetuneBendModControl) StereoChunk
osc SampleRate Real
sr
         T (T Chunk DetuneBendModControl) StereoChunk
-> T (WithEnvelopeControl DetuneBendModControl)
     (T Chunk DetuneBendModControl)
-> T (WithEnvelopeControl DetuneBendModControl) StereoChunk
forall b c a. T b c -> T a b -> T a c
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
.
         (T DetuneBendModControl DetuneBendModControl
-> T (T Chunk DetuneBendModControl) (T Chunk DetuneBendModControl)
forall (arrow :: * -> * -> *) a b c.
Arrow arrow =>
arrow a b -> arrow (T c a) (T c b)
Zip.arrowSecond (T DetuneBendModControl DetuneBendModControl
 -> T (T Chunk DetuneBendModControl) (T Chunk DetuneBendModControl))
-> T DetuneBendModControl DetuneBendModControl
-> T (T Chunk DetuneBendModControl) (T Chunk DetuneBendModControl)
forall a b. (a -> b) -> a -> b
$ T (T ShortStrictTime (T Real)) (T ShortStrictTime (T Real))
-> T DetuneBendModControl DetuneBendModControl
forall (arrow :: * -> * -> *) a b c.
Arrow arrow =>
arrow a b -> arrow (T c a) (T c b)
Zip.arrowSecond (T (T ShortStrictTime (T Real)) (T ShortStrictTime (T Real))
 -> T DetuneBendModControl DetuneBendModControl)
-> T (T ShortStrictTime (T Real)) (T ShortStrictTime (T Real))
-> T DetuneBendModControl DetuneBendModControl
forall a b. (a -> b) -> a -> b
$
            (T ShortStrictTime (T Real) -> T ShortStrictTime (T Real))
-> T (T ShortStrictTime (T Real)) (T ShortStrictTime (T Real))
forall b c. (b -> c) -> T b c
forall (a :: * -> * -> *) b c. Arrow a => (b -> c) -> a b c
arr ((T ShortStrictTime (T Real) -> T ShortStrictTime (T Real))
 -> T (T ShortStrictTime (T Real)) (T ShortStrictTime (T Real)))
-> (T ShortStrictTime (T Real) -> T ShortStrictTime (T Real))
-> T (T ShortStrictTime (T Real)) (T ShortStrictTime (T Real))
forall a b. (a -> b) -> a -> b
$ SampleRate Real
-> Real -> T ShortStrictTime (T Real) -> T ShortStrictTime (T Real)
forall (stream :: * -> *).
Functor stream =>
SampleRate Real -> Real -> stream (T Real) -> stream (T Real)
transposeModulation SampleRate Real
sr Real
freq)
         T (T Chunk DetuneBendModControl) (T Chunk DetuneBendModControl)
-> T (WithEnvelopeControl DetuneBendModControl)
     (T Chunk DetuneBendModControl)
-> T (WithEnvelopeControl DetuneBendModControl)
     (T Chunk DetuneBendModControl)
forall b c a. T b c -> T a b -> T a c
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
.
         T EnvelopeControl Chunk
-> T (WithEnvelopeControl DetuneBendModControl)
     (T Chunk DetuneBendModControl)
forall (arrow :: * -> * -> *) a b.
(Arrow arrow, Transform a, Transform b) =>
arrow EnvelopeControl a -> arrow (WithEnvelopeControl b) (T a b)
zipEnvelope (SampleRate Real -> Real -> T EnvelopeControl Chunk
env SampleRate Real
sr Real
vel))
      (DSL
  (SampleRate Real -> T (T Chunk DetuneBendModControl) StereoChunk)
  (Element
     (In
        (SampleRate Real -> T (T Chunk DetuneBendModControl) StereoChunk)))
  (Element
     (Out
        (SampleRate Real -> T (T Chunk DetuneBendModControl) StereoChunk)))
-> IO
     (SampleRate Real -> T (T Chunk DetuneBendModControl) StereoChunk)
forall f a al b bl.
(Run f, In f ~ a, Default a, Element a ~ al, Out f ~ b, Default b,
 Element b ~ bl) =>
DSL f al bl -> IO f
CausalRender.run (DSL
   (SampleRate Real -> T (T Chunk DetuneBendModControl) StereoChunk)
   (Element
      (In
         (SampleRate Real -> T (T Chunk DetuneBendModControl) StereoChunk)))
   (Element
      (Out
         (SampleRate Real -> T (T Chunk DetuneBendModControl) StereoChunk)))
 -> IO
      (SampleRate Real -> T (T Chunk DetuneBendModControl) StereoChunk))
-> DSL
     (SampleRate Real -> T (T Chunk DetuneBendModControl) StereoChunk)
     (Element
        (In
           (SampleRate Real -> T (T Chunk DetuneBendModControl) StereoChunk)))
     (Element
        (Out
           (SampleRate Real -> T (T Chunk DetuneBendModControl) StereoChunk)))
-> IO
     (SampleRate Real -> T (T Chunk DetuneBendModControl) StereoChunk)
forall a b. (a -> b) -> a -> b
$ \SampleRate (Exp Real)
sr ->
         (Arguments
   (T (T (T VectorSize Real), (T Real, T (T Real))))
   (T (T VectorSize Real), (T Real, T (T Real)))
 -> T (T (T VectorSize Real), (T Real, T (T Real)))
      (T (T (T VectorSize Real))))
-> T (T (T VectorSize Real), (T Real, T (T Real)))
     (T (T (T VectorSize Real)))
forall inp out.
MakeArguments inp =>
(Arguments (T inp) inp -> T inp out) -> T inp out
F.withArgs ((Arguments
    (T (T (T VectorSize Real), (T Real, T (T Real))))
    (T (T VectorSize Real), (T Real, T (T Real)))
  -> T (T (T VectorSize Real), (T Real, T (T Real)))
       (T (T (T VectorSize Real))))
 -> T (T (T VectorSize Real), (T Real, T (T Real)))
      (T (T (T VectorSize Real))))
-> (Arguments
      (T (T (T VectorSize Real), (T Real, T (T Real))))
      (T (T VectorSize Real), (T Real, T (T Real)))
    -> T (T (T VectorSize Real), (T Real, T (T Real)))
         (T (T (T VectorSize Real))))
-> T (T (T VectorSize Real), (T Real, T (T Real)))
     (T (T (T VectorSize Real)))
forall a b. (a -> b) -> a -> b
$ \(T (T (T VectorSize Real), (T Real, T (T Real)))
  (T (T VectorSize Real))
env,(T (T (T VectorSize Real), (T Real, T (T Real))) (T Real)
reson,T (T (T VectorSize Real), (T Real, T (T Real))) (T (T Real))
fm)) ->
            T (T (T VectorSize Real)) -> T (T (T VectorSize Real))
forall a. T (T a) -> T (T a)
Stereo.multiValue (T (T (T VectorSize Real)) -> T (T (T VectorSize Real)))
-> T (T (T VectorSize Real), T (T (T VectorSize Real)))
     (T (T (T VectorSize Real)))
-> T (T (T VectorSize Real), T (T (T VectorSize Real)))
     (T (T (T VectorSize Real)))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$>
            T (T (T VectorSize Real), T (T (T VectorSize Real)))
  (T (T (T VectorSize Real)))
forall a. PseudoRing a => T (a, T a) (T a)
Causal.envelopeStereo T (T (T VectorSize Real), T (T (T VectorSize Real)))
  (T (T (T VectorSize Real)))
-> T (T (T VectorSize Real), (T Real, T (T Real)))
     (T (T VectorSize Real), T (T (T VectorSize Real)))
-> T (T (T VectorSize Real), (T Real, T (T Real)))
     (T (T (T VectorSize Real)))
forall b c a. T b c -> T a b -> T a c
$& T (T (T VectorSize Real), (T Real, T (T Real)))
  (T (T VectorSize Real))
env T (T (T VectorSize Real), (T Real, T (T Real)))
  (T (T VectorSize Real))
-> T (T (T VectorSize Real), (T Real, T (T Real)))
     (T (T (T VectorSize Real)))
-> T (T (T VectorSize Real), (T Real, T (T Real)))
     (T (T VectorSize Real), T (T (T VectorSize Real)))
forall a b c. T a b -> T a c -> T a (b, c)
&|& T (T (T VectorSize Real), (T Real, T (T Real))) (T Real)
-> T (T (T VectorSize Real), (T Real, T (T Real))) (T (T Real))
-> SampleRate (Exp Real)
-> T (T (T VectorSize Real), (T Real, T (T Real)))
     (T (T (T VectorSize Real)))
forall a.
T a (T Real)
-> T a (T (T Real))
-> SampleRate (Exp Real)
-> T a (T (T (T VectorSize Real)))
windCore T (T (T VectorSize Real), (T Real, T (T Real))) (T Real)
reson T (T (T VectorSize Real), (T Real, T (T Real))) (T (T Real))
fm SampleRate (Exp Real)
sr)
      IO (SampleRate Real -> Real -> T EnvelopeControl Chunk)
stringControlledEnvelope


windPhaser ::
   IO (SampleRate Real -> Real -> Real ->
       PIO.T
          (WithEnvelopeControl
             (Zip.T (Control Real)
                (Zip.T (Control Frequency) DetuneBendModControl)))
          StereoChunk)
windPhaser :: IO
  (SampleRate Real
   -> Real
   -> Real
   -> T (WithEnvelopeControl
           (T (Control Real) (T (Control Frequency) DetuneBendModControl)))
        StereoChunk)
windPhaser =
   ((SampleRate Real
  -> T (T Chunk
          (T (Control Real)
             (T (T ShortStrictTime (CascadeParameter D8 Real))
                DetuneBendModControl)))
       StereoChunk)
 -> (SampleRate Real -> Real -> T EnvelopeControl Chunk)
 -> SampleRate Real
 -> Real
 -> Real
 -> T (WithEnvelopeControl
         (T (Control Real) (T (Control Frequency) DetuneBendModControl)))
      StereoChunk)
-> IO
     (SampleRate Real
      -> T (T Chunk
              (T (Control Real)
                 (T (T ShortStrictTime (CascadeParameter D8 Real))
                    DetuneBendModControl)))
           StereoChunk)
-> IO (SampleRate Real -> Real -> T EnvelopeControl Chunk)
-> IO
     (SampleRate Real
      -> Real
      -> Real
      -> T (WithEnvelopeControl
              (T (Control Real) (T (Control Frequency) DetuneBendModControl)))
           StereoChunk)
forall a b c. (a -> b -> c) -> IO a -> IO b -> IO c
forall (f :: * -> *) a b c.
Applicative f =>
(a -> b -> c) -> f a -> f b -> f c
liftA2
      (\SampleRate Real
-> T (T Chunk
        (T (Control Real)
           (T (T ShortStrictTime (CascadeParameter D8 Real))
              DetuneBendModControl)))
     StereoChunk
osc SampleRate Real -> Real -> T EnvelopeControl Chunk
env SampleRate Real
sr Real
vel Real
freq ->
         SampleRate Real
-> T (T Chunk
        (T (Control Real)
           (T (T ShortStrictTime (CascadeParameter D8 Real))
              DetuneBendModControl)))
     StereoChunk
osc SampleRate Real
sr
         T (T Chunk
     (T (Control Real)
        (T (T ShortStrictTime (CascadeParameter D8 Real))
           DetuneBendModControl)))
  StereoChunk
-> T (WithEnvelopeControl
        (T (Control Real) (T (Control Frequency) DetuneBendModControl)))
     (T Chunk
        (T (Control Real)
           (T (T ShortStrictTime (CascadeParameter D8 Real))
              DetuneBendModControl)))
-> T (WithEnvelopeControl
        (T (Control Real) (T (Control Frequency) DetuneBendModControl)))
     StereoChunk
forall b c a. T b c -> T a b -> T a c
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
.
         (T (T (Control Real) (T (Control Frequency) DetuneBendModControl))
  (T (Control Real)
     (T (T ShortStrictTime (CascadeParameter D8 Real))
        DetuneBendModControl))
-> T (T Chunk
        (T (Control Real) (T (Control Frequency) DetuneBendModControl)))
     (T Chunk
        (T (Control Real)
           (T (T ShortStrictTime (CascadeParameter D8 Real))
              DetuneBendModControl)))
forall (arrow :: * -> * -> *) a b c.
Arrow arrow =>
arrow a b -> arrow (T c a) (T c b)
Zip.arrowSecond (T (T (Control Real) (T (Control Frequency) DetuneBendModControl))
   (T (Control Real)
      (T (T ShortStrictTime (CascadeParameter D8 Real))
         DetuneBendModControl))
 -> T (T Chunk
         (T (Control Real) (T (Control Frequency) DetuneBendModControl)))
      (T Chunk
         (T (Control Real)
            (T (T ShortStrictTime (CascadeParameter D8 Real))
               DetuneBendModControl))))
-> T (T (Control Real)
        (T (Control Frequency) DetuneBendModControl))
     (T (Control Real)
        (T (T ShortStrictTime (CascadeParameter D8 Real))
           DetuneBendModControl))
-> T (T Chunk
        (T (Control Real) (T (Control Frequency) DetuneBendModControl)))
     (T Chunk
        (T (Control Real)
           (T (T ShortStrictTime (CascadeParameter D8 Real))
              DetuneBendModControl)))
forall a b. (a -> b) -> a -> b
$ T (T (Control Frequency) DetuneBendModControl)
  (T (T ShortStrictTime (CascadeParameter D8 Real))
     DetuneBendModControl)
-> T (T (Control Real)
        (T (Control Frequency) DetuneBendModControl))
     (T (Control Real)
        (T (T ShortStrictTime (CascadeParameter D8 Real))
           DetuneBendModControl))
forall (arrow :: * -> * -> *) a b c.
Arrow arrow =>
arrow a b -> arrow (T c a) (T c b)
Zip.arrowSecond (T (T (Control Frequency) DetuneBendModControl)
   (T (T ShortStrictTime (CascadeParameter D8 Real))
      DetuneBendModControl)
 -> T (T (Control Real)
         (T (Control Frequency) DetuneBendModControl))
      (T (Control Real)
         (T (T ShortStrictTime (CascadeParameter D8 Real))
            DetuneBendModControl)))
-> T (T (Control Frequency) DetuneBendModControl)
     (T (T ShortStrictTime (CascadeParameter D8 Real))
        DetuneBendModControl)
-> T (T (Control Real)
        (T (Control Frequency) DetuneBendModControl))
     (T (Control Real)
        (T (T ShortStrictTime (CascadeParameter D8 Real))
           DetuneBendModControl))
forall a b. (a -> b) -> a -> b
$
          T (Control Frequency)
  (T ShortStrictTime (CascadeParameter D8 Real))
-> T DetuneBendModControl DetuneBendModControl
-> T (T (Control Frequency) DetuneBendModControl)
     (T (T ShortStrictTime (CascadeParameter D8 Real))
        DetuneBendModControl)
forall (arrow :: * -> * -> *) a c b d.
Arrow arrow =>
arrow a c -> arrow b d -> arrow (T a b) (T c d)
Zip.arrowSplit
             ((Control Frequency -> T ShortStrictTime (CascadeParameter D8 Real))
-> T (Control Frequency)
     (T ShortStrictTime (CascadeParameter D8 Real))
forall b c. (b -> c) -> T b c
forall (a :: * -> * -> *) b c. Arrow a => (b -> c) -> a b c
arr ((Control Frequency
  -> T ShortStrictTime (CascadeParameter D8 Real))
 -> T (Control Frequency)
      (T ShortStrictTime (CascadeParameter D8 Real)))
-> (Control Frequency
    -> T ShortStrictTime (CascadeParameter D8 Real))
-> T (Control Frequency)
     (T ShortStrictTime (CascadeParameter D8 Real))
forall a b. (a -> b) -> a -> b
$ (Real -> CascadeParameter D8 Real)
-> Control Real -> T ShortStrictTime (CascadeParameter D8 Real)
forall a b. (a -> b) -> T ShortStrictTime a -> T ShortStrictTime b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (Proxy D8 -> Real -> CascadeParameter D8 Real
forall a n.
(C a, Natural n) =>
Proxy n -> a -> CascadeParameter n a
Allpass.flangerParameter Proxy D8
TypeNum.d8) (Control Real -> T ShortStrictTime (CascadeParameter D8 Real))
-> (Control Frequency -> Control Real)
-> Control Frequency
-> T ShortStrictTime (CascadeParameter D8 Real)
forall b c a. (b -> c) -> (a -> b) -> a -> c
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
.
                    SampleRate Real -> Control Frequency -> Control Real
forall (f :: * -> *).
Functor f =>
SampleRate Real -> f Frequency -> f Real
frequencyControl SampleRate Real
sr)
             (T (T ShortStrictTime (T Real)) (T ShortStrictTime (T Real))
-> T DetuneBendModControl DetuneBendModControl
forall (arrow :: * -> * -> *) a b c.
Arrow arrow =>
arrow a b -> arrow (T c a) (T c b)
Zip.arrowSecond (T (T ShortStrictTime (T Real)) (T ShortStrictTime (T Real))
 -> T DetuneBendModControl DetuneBendModControl)
-> T (T ShortStrictTime (T Real)) (T ShortStrictTime (T Real))
-> T DetuneBendModControl DetuneBendModControl
forall a b. (a -> b) -> a -> b
$
              (T ShortStrictTime (T Real) -> T ShortStrictTime (T Real))
-> T (T ShortStrictTime (T Real)) (T ShortStrictTime (T Real))
forall b c. (b -> c) -> T b c
forall (a :: * -> * -> *) b c. Arrow a => (b -> c) -> a b c
arr ((T ShortStrictTime (T Real) -> T ShortStrictTime (T Real))
 -> T (T ShortStrictTime (T Real)) (T ShortStrictTime (T Real)))
-> (T ShortStrictTime (T Real) -> T ShortStrictTime (T Real))
-> T (T ShortStrictTime (T Real)) (T ShortStrictTime (T Real))
forall a b. (a -> b) -> a -> b
$ SampleRate Real
-> Real -> T ShortStrictTime (T Real) -> T ShortStrictTime (T Real)
forall (stream :: * -> *).
Functor stream =>
SampleRate Real -> Real -> stream (T Real) -> stream (T Real)
transposeModulation SampleRate Real
sr Real
freq))
         T (T Chunk
     (T (Control Real) (T (Control Frequency) DetuneBendModControl)))
  (T Chunk
     (T (Control Real)
        (T (T ShortStrictTime (CascadeParameter D8 Real))
           DetuneBendModControl)))
-> T (WithEnvelopeControl
        (T (Control Real) (T (Control Frequency) DetuneBendModControl)))
     (T Chunk
        (T (Control Real) (T (Control Frequency) DetuneBendModControl)))
-> T (WithEnvelopeControl
        (T (Control Real) (T (Control Frequency) DetuneBendModControl)))
     (T Chunk
        (T (Control Real)
           (T (T ShortStrictTime (CascadeParameter D8 Real))
              DetuneBendModControl)))
forall b c a. T b c -> T a b -> T a c
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
.
         T EnvelopeControl Chunk
-> T (WithEnvelopeControl
        (T (Control Real) (T (Control Frequency) DetuneBendModControl)))
     (T Chunk
        (T (Control Real) (T (Control Frequency) DetuneBendModControl)))
forall (arrow :: * -> * -> *) a b.
(Arrow arrow, Transform a, Transform b) =>
arrow EnvelopeControl a -> arrow (WithEnvelopeControl b) (T a b)
zipEnvelope (SampleRate Real -> Real -> T EnvelopeControl Chunk
env SampleRate Real
sr Real
vel))
      (DSL
  (SampleRate Real
   -> T (T Chunk
           (T (Control Real)
              (T (T ShortStrictTime (CascadeParameter D8 Real))
                 DetuneBendModControl)))
        StereoChunk)
  (Element
     (In
        (SampleRate Real
         -> T (T Chunk
                 (T (Control Real)
                    (T (T ShortStrictTime (CascadeParameter D8 Real))
                       DetuneBendModControl)))
              StereoChunk)))
  (Element
     (Out
        (SampleRate Real
         -> T (T Chunk
                 (T (Control Real)
                    (T (T ShortStrictTime (CascadeParameter D8 Real))
                       DetuneBendModControl)))
              StereoChunk)))
-> IO
     (SampleRate Real
      -> T (T Chunk
              (T (Control Real)
                 (T (T ShortStrictTime (CascadeParameter D8 Real))
                    DetuneBendModControl)))
           StereoChunk)
forall f a al b bl.
(Run f, In f ~ a, Default a, Element a ~ al, Out f ~ b, Default b,
 Element b ~ bl) =>
DSL f al bl -> IO f
CausalRender.run (DSL
   (SampleRate Real
    -> T (T Chunk
            (T (Control Real)
               (T (T ShortStrictTime (CascadeParameter D8 Real))
                  DetuneBendModControl)))
         StereoChunk)
   (Element
      (In
         (SampleRate Real
          -> T (T Chunk
                  (T (Control Real)
                     (T (T ShortStrictTime (CascadeParameter D8 Real))
                        DetuneBendModControl)))
               StereoChunk)))
   (Element
      (Out
         (SampleRate Real
          -> T (T Chunk
                  (T (Control Real)
                     (T (T ShortStrictTime (CascadeParameter D8 Real))
                        DetuneBendModControl)))
               StereoChunk)))
 -> IO
      (SampleRate Real
       -> T (T Chunk
               (T (Control Real)
                  (T (T ShortStrictTime (CascadeParameter D8 Real))
                     DetuneBendModControl)))
            StereoChunk))
-> DSL
     (SampleRate Real
      -> T (T Chunk
              (T (Control Real)
                 (T (T ShortStrictTime (CascadeParameter D8 Real))
                    DetuneBendModControl)))
           StereoChunk)
     (Element
        (In
           (SampleRate Real
            -> T (T Chunk
                    (T (Control Real)
                       (T (T ShortStrictTime (CascadeParameter D8 Real))
                          DetuneBendModControl)))
                 StereoChunk)))
     (Element
        (Out
           (SampleRate Real
            -> T (T Chunk
                    (T (Control Real)
                       (T (T ShortStrictTime (CascadeParameter D8 Real))
                          DetuneBendModControl)))
                 StereoChunk)))
-> IO
     (SampleRate Real
      -> T (T Chunk
              (T (Control Real)
                 (T (T ShortStrictTime (CascadeParameter D8 Real))
                    DetuneBendModControl)))
           StereoChunk)
forall a b. (a -> b) -> a -> b
$ \SampleRate (Exp Real)
sr ->
         ((Arguments
   (T (T (T VectorSize Real),
       (T Real, (T (CascadeParameter D8 Real), (T Real, T (T Real))))))
   (T (T VectorSize Real),
    (T Real, (T (CascadeParameter D8 Real), (T Real, T (T Real)))))
 -> T (T (T VectorSize Real),
       (T Real, (T (CascadeParameter D8 Real), (T Real, T (T Real)))))
      (T (T (T VectorSize Real))))
-> T (T (T VectorSize Real),
      (T Real, (T (CascadeParameter D8 Real), (T Real, T (T Real)))))
     (T (T (T VectorSize Real)))
forall inp out.
MakeArguments inp =>
(Arguments (T inp) inp -> T inp out) -> T inp out
F.withArgs ((Arguments
    (T (T (T VectorSize Real),
        (T Real, (T (CascadeParameter D8 Real), (T Real, T (T Real))))))
    (T (T VectorSize Real),
     (T Real, (T (CascadeParameter D8 Real), (T Real, T (T Real)))))
  -> T (T (T VectorSize Real),
        (T Real, (T (CascadeParameter D8 Real), (T Real, T (T Real)))))
       (T (T (T VectorSize Real))))
 -> T (T (T VectorSize Real),
       (T Real, (T (CascadeParameter D8 Real), (T Real, T (T Real)))))
      (T (T (T VectorSize Real))))
-> (Arguments
      (T (T (T VectorSize Real),
          (T Real, (T (CascadeParameter D8 Real), (T Real, T (T Real))))))
      (T (T VectorSize Real),
       (T Real, (T (CascadeParameter D8 Real), (T Real, T (T Real)))))
    -> T (T (T VectorSize Real),
          (T Real, (T (CascadeParameter D8 Real), (T Real, T (T Real)))))
         (T (T (T VectorSize Real))))
-> T (T (T VectorSize Real),
      (T Real, (T (CascadeParameter D8 Real), (T Real, T (T Real)))))
     (T (T (T VectorSize Real)))
forall a b. (a -> b) -> a -> b
$ \(T (T (T VectorSize Real),
   (T Real, (T (CascadeParameter D8 Real), (T Real, T (T Real)))))
  (T (T VectorSize Real))
env,(T (T (T VectorSize Real),
   (T Real, (T (CascadeParameter D8 Real), (T Real, T (T Real)))))
  (T Real)
phaserMix0,(T (T (T VectorSize Real),
   (T Real, (T (CascadeParameter D8 Real), (T Real, T (T Real)))))
  (T (CascadeParameter D8 Real))
phaserFreq,(T (T (T VectorSize Real),
   (T Real, (T (CascadeParameter D8 Real), (T Real, T (T Real)))))
  (T Real)
reson,T (T (T VectorSize Real),
   (T Real, (T (CascadeParameter D8 Real), (T Real, T (T Real)))))
  (T (T Real))
fm)))) ->
          let phaserMix :: T (T (T VectorSize Real),
   (T Real, (T (CascadeParameter D8 Real), (T Real, T (T Real)))))
  (T (T VectorSize Real))
phaserMix = (Exp Real -> Exp (T VectorSize Real))
-> T (T Real) (T (T VectorSize Real))
forall ae a be b.
(Aggregate ae a, Aggregate be b) =>
(ae -> be) -> T a b
Causal.map Exp Real -> Exp (T VectorSize Real)
forall n a. (Positive n, C a) => Exp a -> Exp (T n a)
Serial.upsample T (T Real) (T (T VectorSize Real))
-> T (T (T VectorSize Real),
      (T Real, (T (CascadeParameter D8 Real), (T Real, T (T Real)))))
     (T Real)
-> T (T (T VectorSize Real),
      (T Real, (T (CascadeParameter D8 Real), (T Real, T (T Real)))))
     (T (T VectorSize Real))
forall b c a. T b c -> T a b -> T a c
$& T (T (T VectorSize Real),
   (T Real, (T (CascadeParameter D8 Real), (T Real, T (T Real)))))
  (T Real)
phaserMix0
              noise :: T (T (T VectorSize Real),
   (T Real, (T (CascadeParameter D8 Real), (T Real, T (T Real)))))
  (T (T (T VectorSize Real)))
noise = T (T (T VectorSize Real),
   (T Real, (T (CascadeParameter D8 Real), (T Real, T (T Real)))))
  (T Real)
-> T (T (T VectorSize Real),
      (T Real, (T (CascadeParameter D8 Real), (T Real, T (T Real)))))
     (T (T Real))
-> SampleRate (Exp Real)
-> T (T (T VectorSize Real),
      (T Real, (T (CascadeParameter D8 Real), (T Real, T (T Real)))))
     (T (T (T VectorSize Real)))
forall a.
T a (T Real)
-> T a (T (T Real))
-> SampleRate (Exp Real)
-> T a (T (T (T VectorSize Real)))
windCore T (T (T VectorSize Real),
   (T Real, (T (CascadeParameter D8 Real), (T Real, T (T Real)))))
  (T Real)
reson T (T (T VectorSize Real),
   (T Real, (T (CascadeParameter D8 Real), (T Real, T (T Real)))))
  (T (T Real))
fm SampleRate (Exp Real)
sr

          in T (T (T VectorSize Real)) -> T (T (T VectorSize Real))
forall a. T (T a) -> T (T a)
Stereo.multiValue (T (T (T VectorSize Real)) -> T (T (T VectorSize Real)))
-> T (T (T VectorSize Real), T (T (T VectorSize Real)))
     (T (T (T VectorSize Real)))
-> T (T (T VectorSize Real), T (T (T VectorSize Real)))
     (T (T (T VectorSize Real)))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$>
              T (T (T VectorSize Real), T (T (T VectorSize Real)))
  (T (T (T VectorSize Real)))
forall a. PseudoRing a => T (a, T a) (T a)
Causal.envelopeStereo T (T (T VectorSize Real), T (T (T VectorSize Real)))
  (T (T (T VectorSize Real)))
-> T (T (T VectorSize Real),
      (T Real, (T (CascadeParameter D8 Real), (T Real, T (T Real)))))
     (T (T VectorSize Real), T (T (T VectorSize Real)))
-> T (T (T VectorSize Real),
      (T Real, (T (CascadeParameter D8 Real), (T Real, T (T Real)))))
     (T (T (T VectorSize Real)))
forall b c a. T b c -> T a b -> T a c
$&
                 T (T (T VectorSize Real),
   (T Real, (T (CascadeParameter D8 Real), (T Real, T (T Real)))))
  (T (T VectorSize Real))
env T (T (T VectorSize Real),
   (T Real, (T (CascadeParameter D8 Real), (T Real, T (T Real)))))
  (T (T VectorSize Real))
-> T (T (T VectorSize Real),
      (T Real, (T (CascadeParameter D8 Real), (T Real, T (T Real)))))
     (T (T (T VectorSize Real)))
-> T (T (T VectorSize Real),
      (T Real, (T (CascadeParameter D8 Real), (T Real, T (T Real)))))
     (T (T VectorSize Real), T (T (T VectorSize Real)))
forall a b c. T a b -> T a c -> T a (b, c)
&|&
                 ((T (T (T VectorSize Real), T (T (T VectorSize Real)))
  (T (T (T VectorSize Real)))
forall a. PseudoRing a => T (a, T a) (T a)
Causal.envelopeStereo T (T (T VectorSize Real), T (T (T VectorSize Real)))
  (T (T (T VectorSize Real)))
-> T (T (T VectorSize Real),
      (T Real, (T (CascadeParameter D8 Real), (T Real, T (T Real)))))
     (T (T VectorSize Real), T (T (T VectorSize Real)))
-> T (T (T VectorSize Real),
      (T Real, (T (CascadeParameter D8 Real), (T Real, T (T Real)))))
     (T (T (T VectorSize Real)))
forall b c a. T b c -> T a b -> T a c
$& (T (T (T VectorSize Real),
   (T Real, (T (CascadeParameter D8 Real), (T Real, T (T Real)))))
  (T (T VectorSize Real))
1 T (T (T VectorSize Real),
   (T Real, (T (CascadeParameter D8 Real), (T Real, T (T Real)))))
  (T (T VectorSize Real))
-> T (T (T VectorSize Real),
      (T Real, (T (CascadeParameter D8 Real), (T Real, T (T Real)))))
     (T (T VectorSize Real))
-> T (T (T VectorSize Real),
      (T Real, (T (CascadeParameter D8 Real), (T Real, T (T Real)))))
     (T (T VectorSize Real))
forall a. C a => a -> a -> a
- T (T (T VectorSize Real),
   (T Real, (T (CascadeParameter D8 Real), (T Real, T (T Real)))))
  (T (T VectorSize Real))
phaserMix) T (T (T VectorSize Real),
   (T Real, (T (CascadeParameter D8 Real), (T Real, T (T Real)))))
  (T (T VectorSize Real))
-> T (T (T VectorSize Real),
      (T Real, (T (CascadeParameter D8 Real), (T Real, T (T Real)))))
     (T (T (T VectorSize Real)))
-> T (T (T VectorSize Real),
      (T Real, (T (CascadeParameter D8 Real), (T Real, T (T Real)))))
     (T (T VectorSize Real), T (T (T VectorSize Real)))
forall a b c. T a b -> T a c -> T a (b, c)
&|& T (T (T VectorSize Real),
   (T Real, (T (CascadeParameter D8 Real), (T Real, T (T Real)))))
  (T (T (T VectorSize Real)))
noise)
                  T (T (T VectorSize Real),
   (T Real, (T (CascadeParameter D8 Real), (T Real, T (T Real)))))
  (T (T (T VectorSize Real)))
-> T (T (T VectorSize Real),
      (T Real, (T (CascadeParameter D8 Real), (T Real, T (T Real)))))
     (T (T (T VectorSize Real)))
-> T (T (T VectorSize Real),
      (T Real, (T (CascadeParameter D8 Real), (T Real, T (T Real)))))
     (T (T (T VectorSize Real)))
forall a. C a => a -> a -> a
+
                  (T (T (T VectorSize Real), T (T (T VectorSize Real)))
  (T (T (T VectorSize Real)))
forall a. PseudoRing a => T (a, T a) (T a)
Causal.envelopeStereo T (T (T VectorSize Real), T (T (T VectorSize Real)))
  (T (T (T VectorSize Real)))
-> T (T (T VectorSize Real),
      (T Real, (T (CascadeParameter D8 Real), (T Real, T (T Real)))))
     (T (T VectorSize Real), T (T (T VectorSize Real)))
-> T (T (T VectorSize Real),
      (T Real, (T (CascadeParameter D8 Real), (T Real, T (T Real)))))
     (T (T (T VectorSize Real)))
forall b c a. T b c -> T a b -> T a c
$&
                     T (T (T VectorSize Real),
   (T Real, (T (CascadeParameter D8 Real), (T Real, T (T Real)))))
  (T (T VectorSize Real))
phaserMix T (T (T VectorSize Real),
   (T Real, (T (CascadeParameter D8 Real), (T Real, T (T Real)))))
  (T (T VectorSize Real))
-> T (T (T VectorSize Real),
      (T Real, (T (CascadeParameter D8 Real), (T Real, T (T Real)))))
     (T (T (T VectorSize Real)))
-> T (T (T VectorSize Real),
      (T Real, (T (CascadeParameter D8 Real), (T Real, T (T Real)))))
     (T (T VectorSize Real), T (T (T VectorSize Real)))
forall a b c. T a b -> T a c -> T a (b, c)
&|&
                     (T (CascadeParameter D8 (T Real), T (T VectorSize Real))
  (T (T VectorSize Real))
-> T (CascadeParameter D8 (T Real), T (T (T VectorSize Real)))
     (T (T (T VectorSize Real)))
forall (arrow :: * -> * -> *) c a b.
Arrow arrow =>
arrow (c, a) b -> arrow (c, T a) (T b)
Stereo.arrowFromMonoControlled T (CascadeParameter D8 (T Real), T (T VectorSize Real))
  (T (T VectorSize Real))
forall parameter a b. C parameter a b => T (parameter, a) b
CtrlPS.process T (CascadeParameter D8 (T Real), T (T (T VectorSize Real)))
  (T (T (T VectorSize Real)))
-> T (T (T VectorSize Real),
      (T Real, (T (CascadeParameter D8 Real), (T Real, T (T Real)))))
     (CascadeParameter D8 (T Real), T (T (T VectorSize Real)))
-> T (T (T VectorSize Real),
      (T Real, (T (CascadeParameter D8 Real), (T Real, T (T Real)))))
     (T (T (T VectorSize Real)))
forall b c a. T b c -> T a b -> T a c
$&
                        (T (CascadeParameter D8 Real) -> CascadeParameter D8 (T Real)
forall n a. T (CascadeParameter n a) -> CascadeParameter n (T a)
Allpass.cascadeParameterUnMultiValue (T (CascadeParameter D8 Real) -> CascadeParameter D8 (T Real))
-> T (T (T VectorSize Real),
      (T Real, (T (CascadeParameter D8 Real), (T Real, T (T Real)))))
     (T (CascadeParameter D8 Real))
-> T (T (T VectorSize Real),
      (T Real, (T (CascadeParameter D8 Real), (T Real, T (T Real)))))
     (CascadeParameter D8 (T Real))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> T (T (T VectorSize Real),
   (T Real, (T (CascadeParameter D8 Real), (T Real, T (T Real)))))
  (T (CascadeParameter D8 Real))
phaserFreq)
                        T (T (T VectorSize Real),
   (T Real, (T (CascadeParameter D8 Real), (T Real, T (T Real)))))
  (CascadeParameter D8 (T Real))
-> T (T (T VectorSize Real),
      (T Real, (T (CascadeParameter D8 Real), (T Real, T (T Real)))))
     (T (T (T VectorSize Real)))
-> T (T (T VectorSize Real),
      (T Real, (T (CascadeParameter D8 Real), (T Real, T (T Real)))))
     (CascadeParameter D8 (T Real), T (T (T VectorSize Real)))
forall a b c. T a b -> T a c -> T a (b, c)
&|& T (T (T VectorSize Real),
   (T Real, (T (CascadeParameter D8 Real), (T Real, T (T Real)))))
  (T (T (T VectorSize Real)))
noise)))))
      IO (SampleRate Real -> Real -> T EnvelopeControl Chunk)
stringControlledEnvelope


phaserOsci ::
   (Exp Real -> Exp Real -> Causal.T a VectorValue) ->
   Causal.T a (Stereo.T VectorValue)
phaserOsci :: forall a.
(Exp Real -> Exp Real -> T a (T (T VectorSize Real)))
-> T a (T (T (T VectorSize Real)))
phaserOsci Exp Real -> Exp Real -> T a (T (T VectorSize Real))
osci =
   Exp Real
-> T (T (T (T VectorSize Real))) (T (T (T VectorSize Real)))
forall n a.
(Positive n, PseudoRing a) =>
Exp a -> T (T (Serial n a)) (T (Serial n a))
CausalPS.amplifyStereo Exp Real
0.25
   T (T (T (T VectorSize Real))) (T (T (T VectorSize Real)))
-> T a (T (T (T VectorSize Real)))
-> T a (T (T (T VectorSize Real)))
forall b c a. T b c -> T a b -> T a c
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
.
   ([T a (T (T VectorSize Real))] -> T a (T (T VectorSize Real)))
-> T [T a (T (T VectorSize Real))]
-> T a (T (T (T VectorSize Real)))
forall (t :: * -> *) (f :: * -> *) a b.
(Traversable t, Applicative f) =>
(a -> f b) -> t a -> f (t b)
forall (f :: * -> *) a b.
Applicative f =>
(a -> f b) -> T a -> f (T b)
Trav.traverse [T a (T (T VectorSize Real))] -> T a (T (T VectorSize Real))
forall a. C a => [a] -> a
sumNested
      ([T a (T (T VectorSize Real))]
-> [T a (T (T VectorSize Real))] -> T [T a (T (T VectorSize Real))]
forall a. a -> a -> T a
Stereo.cons
         ((Exp Real -> Exp Real -> T a (T (T VectorSize Real)))
-> [Exp Real] -> [Exp Real] -> [T a (T (T VectorSize Real))]
forall a b c. (a -> b -> c) -> [a] -> [b] -> [c]
zipWith Exp Real -> Exp Real -> T a (T (T VectorSize Real))
osci [Exp Real
0.1, Exp Real
0.7, Exp Real
0.2, Exp Real
0.3] [Exp Real
1.0, -Exp Real
0.4, Exp Real
0.5, -Exp Real
0.7])
         ((Exp Real -> Exp Real -> T a (T (T VectorSize Real)))
-> [Exp Real] -> [Exp Real] -> [T a (T (T VectorSize Real))]
forall a b c. (a -> b -> c) -> [a] -> [b] -> [c]
zipWith Exp Real -> Exp Real -> T a (T (T VectorSize Real))
osci [Exp Real
0.4, Exp Real
0.9, Exp Real
0.6, Exp Real
0.5] [Exp Real
0.4, -Exp Real
1.0, Exp Real
0.7, -Exp Real
0.5]))


type
   StringInstrument =
      SampleRate Real -> Real -> Real ->
      PIO.T
         (WithEnvelopeControl
            (Zip.T (Control Real) DetuneBendModControl))
         StereoChunk

softStringShapeCore ::
   (forall r.
    VectorValue ->
    VectorValue ->
    LLVM.CodeGenFunction r VectorValue) ->
   IO StringInstrument
softStringShapeCore :: (forall r.
 T (T VectorSize Real)
 -> T (T VectorSize Real)
 -> CodeGenFunction r (T (T VectorSize Real)))
-> IO StringInstrument
softStringShapeCore forall r.
T (T VectorSize Real)
-> T (T VectorSize Real)
-> CodeGenFunction r (T (T VectorSize Real))
wave =
   ((SampleRate Real
  -> T (T Chunk (T (Control Real) DetuneBendModControl)) StereoChunk)
 -> (SampleRate Real -> Real -> T EnvelopeControl Chunk)
 -> StringInstrument)
-> IO
     (SampleRate Real
      -> T (T Chunk (T (Control Real) DetuneBendModControl)) StereoChunk)
-> IO (SampleRate Real -> Real -> T EnvelopeControl Chunk)
-> IO StringInstrument
forall a b c. (a -> b -> c) -> IO a -> IO b -> IO c
forall (f :: * -> *) a b c.
Applicative f =>
(a -> b -> c) -> f a -> f b -> f c
liftA2
      (\SampleRate Real
-> T (T Chunk (T (Control Real) DetuneBendModControl)) StereoChunk
osc SampleRate Real -> Real -> T EnvelopeControl Chunk
env SampleRate Real
sr Real
vel Real
freq ->
         SampleRate Real
-> T (T Chunk (T (Control Real) DetuneBendModControl)) StereoChunk
osc SampleRate Real
sr
         T (T Chunk (T (Control Real) DetuneBendModControl)) StereoChunk
-> T (WithEnvelopeControl (T (Control Real) DetuneBendModControl))
     (T Chunk (T (Control Real) DetuneBendModControl))
-> T (WithEnvelopeControl (T (Control Real) DetuneBendModControl))
     StereoChunk
forall b c a. T b c -> T a b -> T a c
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
.
         (T (T (Control Real) DetuneBendModControl)
  (T (Control Real) DetuneBendModControl)
-> T (T Chunk (T (Control Real) DetuneBendModControl))
     (T Chunk (T (Control Real) DetuneBendModControl))
forall (arrow :: * -> * -> *) a b c.
Arrow arrow =>
arrow a b -> arrow (T c a) (T c b)
Zip.arrowSecond (T (T (Control Real) DetuneBendModControl)
   (T (Control Real) DetuneBendModControl)
 -> T (T Chunk (T (Control Real) DetuneBendModControl))
      (T Chunk (T (Control Real) DetuneBendModControl)))
-> T (T (Control Real) DetuneBendModControl)
     (T (Control Real) DetuneBendModControl)
-> T (T Chunk (T (Control Real) DetuneBendModControl))
     (T Chunk (T (Control Real) DetuneBendModControl))
forall a b. (a -> b) -> a -> b
$ T DetuneBendModControl DetuneBendModControl
-> T (T (Control Real) DetuneBendModControl)
     (T (Control Real) DetuneBendModControl)
forall (arrow :: * -> * -> *) a b c.
Arrow arrow =>
arrow a b -> arrow (T c a) (T c b)
Zip.arrowSecond (T DetuneBendModControl DetuneBendModControl
 -> T (T (Control Real) DetuneBendModControl)
      (T (Control Real) DetuneBendModControl))
-> T DetuneBendModControl DetuneBendModControl
-> T (T (Control Real) DetuneBendModControl)
     (T (Control Real) DetuneBendModControl)
forall a b. (a -> b) -> a -> b
$
          T (T ShortStrictTime (T Real)) (T ShortStrictTime (T Real))
-> T DetuneBendModControl DetuneBendModControl
forall (arrow :: * -> * -> *) a b c.
Arrow arrow =>
arrow a b -> arrow (T c a) (T c b)
Zip.arrowSecond (T (T ShortStrictTime (T Real)) (T ShortStrictTime (T Real))
 -> T DetuneBendModControl DetuneBendModControl)
-> T (T ShortStrictTime (T Real)) (T ShortStrictTime (T Real))
-> T DetuneBendModControl DetuneBendModControl
forall a b. (a -> b) -> a -> b
$
            (T ShortStrictTime (T Real) -> T ShortStrictTime (T Real))
-> T (T ShortStrictTime (T Real)) (T ShortStrictTime (T Real))
forall b c. (b -> c) -> T b c
forall (a :: * -> * -> *) b c. Arrow a => (b -> c) -> a b c
arr ((T ShortStrictTime (T Real) -> T ShortStrictTime (T Real))
 -> T (T ShortStrictTime (T Real)) (T ShortStrictTime (T Real)))
-> (T ShortStrictTime (T Real) -> T ShortStrictTime (T Real))
-> T (T ShortStrictTime (T Real)) (T ShortStrictTime (T Real))
forall a b. (a -> b) -> a -> b
$ SampleRate Real
-> Real -> T ShortStrictTime (T Real) -> T ShortStrictTime (T Real)
forall (stream :: * -> *).
Functor stream =>
SampleRate Real -> Real -> stream (T Real) -> stream (T Real)
transposeModulation SampleRate Real
sr Real
freq)
         T (T Chunk (T (Control Real) DetuneBendModControl))
  (T Chunk (T (Control Real) DetuneBendModControl))
-> T (WithEnvelopeControl (T (Control Real) DetuneBendModControl))
     (T Chunk (T (Control Real) DetuneBendModControl))
-> T (WithEnvelopeControl (T (Control Real) DetuneBendModControl))
     (T Chunk (T (Control Real) DetuneBendModControl))
forall b c a. T b c -> T a b -> T a c
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
.
         T EnvelopeControl Chunk
-> T (WithEnvelopeControl (T (Control Real) DetuneBendModControl))
     (T Chunk (T (Control Real) DetuneBendModControl))
forall (arrow :: * -> * -> *) a b.
(Arrow arrow, Transform a, Transform b) =>
arrow EnvelopeControl a -> arrow (WithEnvelopeControl b) (T a b)
zipEnvelope (SampleRate Real -> Real -> T EnvelopeControl Chunk
env SampleRate Real
sr Real
vel))
      (DSL
  (SampleRate Real
   -> T (T Chunk (T (Control Real) DetuneBendModControl)) StereoChunk)
  (Element
     (In
        (SampleRate Real
         -> T (T Chunk (T (Control Real) DetuneBendModControl))
              StereoChunk)))
  (Element
     (Out
        (SampleRate Real
         -> T (T Chunk (T (Control Real) DetuneBendModControl))
              StereoChunk)))
-> IO
     (SampleRate Real
      -> T (T Chunk (T (Control Real) DetuneBendModControl)) StereoChunk)
forall f a al b bl.
(Run f, In f ~ a, Default a, Element a ~ al, Out f ~ b, Default b,
 Element b ~ bl) =>
DSL f al bl -> IO f
CausalRender.run (DSL
   (SampleRate Real
    -> T (T Chunk (T (Control Real) DetuneBendModControl)) StereoChunk)
   (Element
      (In
         (SampleRate Real
          -> T (T Chunk (T (Control Real) DetuneBendModControl))
               StereoChunk)))
   (Element
      (Out
         (SampleRate Real
          -> T (T Chunk (T (Control Real) DetuneBendModControl))
               StereoChunk)))
 -> IO
      (SampleRate Real
       -> T (T Chunk (T (Control Real) DetuneBendModControl))
            StereoChunk))
-> DSL
     (SampleRate Real
      -> T (T Chunk (T (Control Real) DetuneBendModControl)) StereoChunk)
     (Element
        (In
           (SampleRate Real
            -> T (T Chunk (T (Control Real) DetuneBendModControl))
                 StereoChunk)))
     (Element
        (Out
           (SampleRate Real
            -> T (T Chunk (T (Control Real) DetuneBendModControl))
                 StereoChunk)))
-> IO
     (SampleRate Real
      -> T (T Chunk (T (Control Real) DetuneBendModControl)) StereoChunk)
forall a b. (a -> b) -> a -> b
$
       (SampleRate (Exp Real) -> Exp Real -> Exp Real)
-> Exp Real
-> (Exp Real
    -> SampleRate (Exp Real)
    -> T (T (T VectorSize Real), (T Real, (T Real, T (T Real))))
         (T (T (T VectorSize Real))))
-> SampleRate (Exp Real)
-> T (T (T VectorSize Real), (T Real, (T Real, T (T Real))))
     (T (T (T VectorSize Real)))
forall a b c d.
(SampleRate a -> b -> c)
-> b -> (c -> SampleRate a -> d) -> SampleRate a -> d
constant SampleRate (Exp Real) -> Exp Real -> Exp Real
forall a. C a => SampleRate a -> a -> a
frequency Exp Real
5 ((Exp Real
  -> SampleRate (Exp Real)
  -> T (T (T VectorSize Real), (T Real, (T Real, T (T Real))))
       (T (T (T VectorSize Real))))
 -> SampleRate (Exp Real)
 -> T (T (T VectorSize Real), (T Real, (T Real, T (T Real))))
      (T (T (T VectorSize Real))))
-> (Exp Real
    -> SampleRate (Exp Real)
    -> T (T (T VectorSize Real), (T Real, (T Real, T (T Real))))
         (T (T (T VectorSize Real))))
-> SampleRate (Exp Real)
-> T (T (T VectorSize Real), (T Real, (T Real, T (T Real))))
     (T (T (T VectorSize Real)))
forall a b. (a -> b) -> a -> b
$ \Exp Real
speed SampleRate (Exp Real)
_sr ->
         ((T (T (T VectorSize Real)) -> T (T (T VectorSize Real)))
-> T (T (T (T VectorSize Real))) (T (T (T VectorSize Real)))
forall b c. (b -> c) -> T b c
forall (a :: * -> * -> *) b c. Arrow a => (b -> c) -> a b c
arr T (T (T VectorSize Real)) -> T (T (T VectorSize Real))
forall a. T (T a) -> T (T a)
Stereo.multiValue
          T (T (T (T VectorSize Real))) (T (T (T VectorSize Real)))
-> T (T (T VectorSize Real), (T Real, (T Real, T (T Real))))
     (T (T (T VectorSize Real)))
-> T (T (T VectorSize Real), (T Real, (T Real, T (T Real))))
     (T (T (T VectorSize Real)))
forall b c a. T b c -> T a b -> T a c
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
.
          T (T (T VectorSize Real), T (T (T VectorSize Real)))
  (T (T (T VectorSize Real)))
forall a. PseudoRing a => T (a, T a) (T a)
Causal.envelopeStereo
          T (T (T VectorSize Real), T (T (T VectorSize Real)))
  (T (T (T VectorSize Real)))
-> T (T (T VectorSize Real), (T Real, (T Real, T (T Real))))
     (T (T VectorSize Real), T (T (T VectorSize Real)))
-> T (T (T VectorSize Real), (T Real, (T Real, T (T Real))))
     (T (T (T VectorSize Real)))
forall b c a. T b c -> T a b -> T a c
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
.
          T (T Real, (T Real, T (T Real))) (T (T (T VectorSize Real)))
-> T (T (T VectorSize Real), (T Real, (T Real, T (T Real))))
     (T (T VectorSize Real), T (T (T VectorSize Real)))
forall b c d. T b c -> T (d, b) (d, c)
forall (a :: * -> * -> *) b c d.
Arrow a =>
a b c -> a (d, b) (d, c)
second
             ((Arguments
   (T (T Real, (T Real, T (T Real)))) (T Real, (T Real, T (T Real)))
 -> T (T Real, (T Real, T (T Real))) (T (T (T VectorSize Real))))
-> T (T Real, (T Real, T (T Real))) (T (T (T VectorSize Real)))
forall inp out.
MakeArguments inp =>
(Arguments (T inp) inp -> T inp out) -> T inp out
F.withArgs ((Arguments
    (T (T Real, (T Real, T (T Real)))) (T Real, (T Real, T (T Real)))
  -> T (T Real, (T Real, T (T Real))) (T (T (T VectorSize Real))))
 -> T (T Real, (T Real, T (T Real))) (T (T (T VectorSize Real))))
-> (Arguments
      (T (T Real, (T Real, T (T Real)))) (T Real, (T Real, T (T Real)))
    -> T (T Real, (T Real, T (T Real))) (T (T (T VectorSize Real))))
-> T (T Real, (T Real, T (T Real))) (T (T (T VectorSize Real)))
forall a b. (a -> b) -> a -> b
$ \(T (T Real, (T Real, T (T Real))) (T Real)
shape0,(T (T Real, (T Real, T (T Real))) (T Real)
det0,T (T Real, (T Real, T (T Real))) (T (T Real))
fm)) ->
              let det :: T (T Real, (T Real, T (T Real))) (T (T VectorSize Real))
det = (Exp Real -> Exp (T VectorSize Real))
-> T (T Real) (T (T VectorSize Real))
forall ae a be b.
(Aggregate ae a, Aggregate be b) =>
(ae -> be) -> T a b
Causal.map Exp Real -> Exp (T VectorSize Real)
forall n a. (Positive n, C a) => Exp a -> Exp (T n a)
Serial.upsample T (T Real) (T (T VectorSize Real))
-> T (T Real, (T Real, T (T Real))) (T Real)
-> T (T Real, (T Real, T (T Real))) (T (T VectorSize Real))
forall b c a. T b c -> T a b -> T a c
$& T (T Real, (T Real, T (T Real))) (T Real)
det0
                  shape :: T (T Real, (T Real, T (T Real))) (T (T VectorSize Real))
shape = (Exp Real -> Exp (T VectorSize Real))
-> T (T Real) (T (T VectorSize Real))
forall ae a be b.
(Aggregate ae a, Aggregate be b) =>
(ae -> be) -> T a b
Causal.map Exp Real -> Exp (T VectorSize Real)
forall n a. (Positive n, C a) => Exp a -> Exp (T n a)
Serial.upsample T (T Real) (T (T VectorSize Real))
-> T (T Real, (T Real, T (T Real))) (T Real)
-> T (T Real, (T Real, T (T Real))) (T (T VectorSize Real))
forall b c a. T b c -> T a b -> T a c
$& T (T Real, (T Real, T (T Real))) (T Real)
shape0
                  modu :: T (T Real, (T Real, T (T Real))) (T (T VectorSize Real))
modu = Exp Real
-> T (T Real, (T Real, T (T Real))) (T (T Real))
-> T (T Real, (T Real, T (T Real))) (T (T VectorSize Real))
forall inp.
Exp Real -> T inp (T (T Real)) -> T inp (T (T VectorSize Real))
frequencyFromBendModulationPacked Exp Real
speed T (T Real, (T Real, T (T Real))) (T (T Real))
fm
                  osci ::
                     Exp Real ->
                     Exp Real ->
                     Causal.T
                        (VectorValue,
                              {- wave shape parameter -}
                         (VectorValue, VectorValue)
                              {- detune, frequency modulation -})
                        VectorValue
                  osci :: Exp Real
-> Exp Real
-> T (T (T VectorSize Real),
      (T (T VectorSize Real), T (T VectorSize Real)))
     (T (T VectorSize Real))
osci Exp Real
p Exp Real
d =
                     (forall r.
 T (T VectorSize Real)
 -> T (T VectorSize Real)
 -> CodeGenFunction r (T (T VectorSize Real)))
-> T (T (T VectorSize Real),
      (T (T VectorSize Real), T (T VectorSize Real)))
     (T (T VectorSize Real))
forall n t c y.
(Positive n, C t, Fraction t) =>
(forall r. c -> Serial n t -> CodeGenFunction r y)
-> T (c, (Serial n t, Serial n t)) y
CausalPS.shapeModOsci T (T VectorSize Real)
-> T (T VectorSize Real)
-> CodeGenFunction r (T (T VectorSize Real))
forall r.
T (T VectorSize Real)
-> T (T VectorSize Real)
-> CodeGenFunction r (T (T VectorSize Real))
wave
                     T (T (T VectorSize Real),
   (T (T VectorSize Real), T (T VectorSize Real)))
  (T (T VectorSize Real))
-> T (T (T VectorSize Real),
      (T (T VectorSize Real), T (T VectorSize Real)))
     (T (T VectorSize Real),
      (T (T VectorSize Real), T (T VectorSize Real)))
-> T (T (T VectorSize Real),
      (T (T VectorSize Real), T (T VectorSize Real)))
     (T (T VectorSize Real))
forall b c a. T b c -> T a b -> T a c
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
.
                     T (T (T VectorSize Real), T (T VectorSize Real))
  (T (T VectorSize Real), T (T VectorSize Real))
-> T (T (T VectorSize Real),
      (T (T VectorSize Real), T (T VectorSize Real)))
     (T (T VectorSize Real),
      (T (T VectorSize Real), T (T VectorSize Real)))
forall b c d. T b c -> T (d, b) (d, c)
forall (a :: * -> * -> *) b c d.
Arrow a =>
a b c -> a (d, b) (d, c)
second
                        (SignalOf T (T (T VectorSize Real))
-> T (T (T VectorSize Real))
     (T (T VectorSize Real), T (T VectorSize Real))
forall (process :: * -> * -> *) a b.
C process =>
SignalOf process a -> process b (a, b)
CausalClass.feedFst (Exp Real -> T (T (T VectorSize Real))
forall n a. Vector n a => Exp a -> T (Serial n a)
SigPS.constant Exp Real
p)
                         T (T (T VectorSize Real))
  (T (T VectorSize Real), T (T VectorSize Real))
-> T (T (T VectorSize Real), T (T VectorSize Real))
     (T (T VectorSize Real))
-> T (T (T VectorSize Real), T (T VectorSize Real))
     (T (T VectorSize Real), T (T VectorSize Real))
forall b c a. T b c -> T a b -> T a c
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
.
                         T (T (T VectorSize Real), T (T VectorSize Real))
  (T (T VectorSize Real))
forall a. PseudoRing a => T (a, a) a
Causal.envelope
                         T (T (T VectorSize Real), T (T VectorSize Real))
  (T (T VectorSize Real))
-> T (T (T VectorSize Real), T (T VectorSize Real))
     (T (T VectorSize Real), T (T VectorSize Real))
-> T (T (T VectorSize Real), T (T VectorSize Real))
     (T (T VectorSize Real))
forall b c a. T b c -> T a b -> T a c
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
.
                         T (T (T VectorSize Real)) (T (T VectorSize Real))
-> T (T (T VectorSize Real), T (T VectorSize Real))
     (T (T VectorSize Real), T (T VectorSize Real))
forall b c d. T b c -> T (b, d) (c, d)
forall (a :: * -> * -> *) b c d.
Arrow a =>
a b c -> a (b, d) (c, d)
first (T (T (T VectorSize Real)) (T (T VectorSize Real))
forall a. C a => a
one T (T (T VectorSize Real)) (T (T VectorSize Real))
-> T (T (T VectorSize Real)) (T (T VectorSize Real))
-> T (T (T VectorSize Real)) (T (T VectorSize Real))
forall a. C a => a -> a -> a
+ Exp Real -> T (T (T VectorSize Real)) (T (T VectorSize Real))
forall n a.
(Positive n, PseudoRing a) =>
Exp a -> T (Serial n a) (Serial n a)
CausalPS.amplify Exp Real
d))

              in  (Exp Real
 -> Exp Real
 -> T (T (T VectorSize Real),
       (T (T VectorSize Real), T (T VectorSize Real)))
      (T (T VectorSize Real)))
-> T (T (T VectorSize Real),
      (T (T VectorSize Real), T (T VectorSize Real)))
     (T (T (T VectorSize Real)))
forall a.
(Exp Real -> Exp Real -> T a (T (T VectorSize Real)))
-> T a (T (T (T VectorSize Real)))
phaserOsci Exp Real
-> Exp Real
-> T (T (T VectorSize Real),
      (T (T VectorSize Real), T (T VectorSize Real)))
     (T (T VectorSize Real))
osci T (T (T VectorSize Real),
   (T (T VectorSize Real), T (T VectorSize Real)))
  (T (T (T VectorSize Real)))
-> T (T Real, (T Real, T (T Real)))
     (T (T VectorSize Real),
      (T (T VectorSize Real), T (T VectorSize Real)))
-> T (T Real, (T Real, T (T Real))) (T (T (T VectorSize Real)))
forall b c a. T b c -> T a b -> T a c
$&  T (T Real, (T Real, T (T Real))) (T (T VectorSize Real))
shape T (T Real, (T Real, T (T Real))) (T (T VectorSize Real))
-> T (T Real, (T Real, T (T Real)))
     (T (T VectorSize Real), T (T VectorSize Real))
-> T (T Real, (T Real, T (T Real)))
     (T (T VectorSize Real),
      (T (T VectorSize Real), T (T VectorSize Real)))
forall a b c. T a b -> T a c -> T a (b, c)
&|& T (T Real, (T Real, T (T Real))) (T (T VectorSize Real))
det T (T Real, (T Real, T (T Real))) (T (T VectorSize Real))
-> T (T Real, (T Real, T (T Real))) (T (T VectorSize Real))
-> T (T Real, (T Real, T (T Real)))
     (T (T VectorSize Real), T (T VectorSize Real))
forall a b c. T a b -> T a c -> T a (b, c)
&|& T (T Real, (T Real, T (T Real))) (T (T VectorSize Real))
modu)))
      IO (SampleRate Real -> Real -> T EnvelopeControl Chunk)
stringControlledEnvelope

arcStringStereoFM ::
   (forall r.
    VectorValue ->
    LLVM.CodeGenFunction r VectorValue) ->
   IO StringInstrument
arcStringStereoFM :: (forall r.
 T (T VectorSize Real) -> CodeGenFunction r (T (T VectorSize Real)))
-> IO StringInstrument
arcStringStereoFM forall r.
T (T VectorSize Real) -> CodeGenFunction r (T (T VectorSize Real))
wave =
   (forall r.
 T (T VectorSize Real)
 -> T (T VectorSize Real)
 -> CodeGenFunction r (T (T VectorSize Real)))
-> IO StringInstrument
softStringShapeCore
      (\T (T VectorSize Real)
k T (T VectorSize Real)
p ->
         (T (T VectorSize Real)
 -> T (T VectorSize Real)
 -> CodeGenFunction r (T (T VectorSize Real)))
-> CodeGenFunction r (T (T VectorSize Real))
-> CodeGenFunction r (T (T VectorSize Real))
-> CodeGenFunction r (T (T VectorSize Real))
forall (m :: * -> *) a b c.
Monad m =>
(a -> b -> m c) -> m a -> m b -> m c
M.liftJoin2 T (T VectorSize Real)
-> T (T VectorSize Real)
-> CodeGenFunction r (T (T VectorSize Real))
forall a r. PseudoRing a => a -> a -> CodeGenFunction r a
Frame.amplifyMono
            (T (T VectorSize Real) -> CodeGenFunction r (T (T VectorSize Real))
forall a r.
(PseudoRing a, RationalConstant a, Real a) =>
a -> CodeGenFunction r a
WaveL.approxSine4 (T (T VectorSize Real)
 -> CodeGenFunction r (T (T VectorSize Real)))
-> CodeGenFunction r (T (T VectorSize Real))
-> CodeGenFunction r (T (T VectorSize Real))
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< T (T VectorSize Real) -> CodeGenFunction r (T (T VectorSize Real))
forall a r.
(PseudoRing a, RationalConstant a, Fraction a) =>
a -> CodeGenFunction r a
WaveL.halfEnvelope T (T VectorSize Real)
p)
            (T (T VectorSize Real) -> CodeGenFunction r (T (T VectorSize Real))
forall r.
T (T VectorSize Real) -> CodeGenFunction r (T (T VectorSize Real))
wave (T (T VectorSize Real)
 -> CodeGenFunction r (T (T VectorSize Real)))
-> CodeGenFunction r (T (T VectorSize Real))
-> CodeGenFunction r (T (T VectorSize Real))
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< T (T VectorSize Real)
-> T (T VectorSize Real)
-> CodeGenFunction r (T (T VectorSize Real))
forall a r.
(PseudoRing a, RationalConstant a, Fraction a) =>
a -> a -> CodeGenFunction r a
WaveL.replicate T (T VectorSize Real)
k T (T VectorSize Real)
p))

softStringShapeFM, cosineStringStereoFM,
   arcSawStringStereoFM, arcSineStringStereoFM,
   arcSquareStringStereoFM, arcTriangleStringStereoFM ::
      IO StringInstrument
softStringShapeFM :: IO StringInstrument
softStringShapeFM =
   (forall r.
 T (T VectorSize Real)
 -> T (T VectorSize Real)
 -> CodeGenFunction r (T (T VectorSize Real)))
-> IO StringInstrument
softStringShapeCore T (T VectorSize Real)
-> T (T VectorSize Real)
-> CodeGenFunction r (T (T VectorSize Real))
forall r.
T (T VectorSize Real)
-> T (T VectorSize Real)
-> CodeGenFunction r (T (T VectorSize Real))
forall a r.
(Field a, RationalConstant a, Real a) =>
a -> a -> CodeGenFunction r a
WaveL.rationalApproxSine1
cosineStringStereoFM :: IO StringInstrument
cosineStringStereoFM =
   (forall r.
 T (T VectorSize Real)
 -> T (T VectorSize Real)
 -> CodeGenFunction r (T (T VectorSize Real)))
-> IO StringInstrument
softStringShapeCore
      (\T (T VectorSize Real)
k T (T VectorSize Real)
p -> T (T VectorSize Real) -> CodeGenFunction r (T (T VectorSize Real))
forall a r.
(PseudoRing a, IntegerConstant a, Fraction a) =>
a -> CodeGenFunction r a
WaveL.approxSine2 (T (T VectorSize Real)
 -> CodeGenFunction r (T (T VectorSize Real)))
-> CodeGenFunction r (T (T VectorSize Real))
-> CodeGenFunction r (T (T VectorSize Real))
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< T (T VectorSize Real)
-> T (T VectorSize Real)
-> CodeGenFunction r (T (T VectorSize Real))
forall a r.
(PseudoRing a, RationalConstant a, Fraction a) =>
a -> a -> CodeGenFunction r a
WaveL.replicate T (T VectorSize Real)
k T (T VectorSize Real)
p)
arcSawStringStereoFM :: IO StringInstrument
arcSawStringStereoFM = (forall r.
 T (T VectorSize Real) -> CodeGenFunction r (T (T VectorSize Real)))
-> IO StringInstrument
arcStringStereoFM T (T VectorSize Real) -> CodeGenFunction r (T (T VectorSize Real))
forall r.
T (T VectorSize Real) -> CodeGenFunction r (T (T VectorSize Real))
forall a r.
(PseudoRing a, IntegerConstant a) =>
a -> CodeGenFunction r a
WaveL.saw
arcSineStringStereoFM :: IO StringInstrument
arcSineStringStereoFM = (forall r.
 T (T VectorSize Real) -> CodeGenFunction r (T (T VectorSize Real)))
-> IO StringInstrument
arcStringStereoFM T (T VectorSize Real) -> CodeGenFunction r (T (T VectorSize Real))
forall r.
T (T VectorSize Real) -> CodeGenFunction r (T (T VectorSize Real))
forall a r.
(PseudoRing a, IntegerConstant a, Fraction a) =>
a -> CodeGenFunction r a
WaveL.approxSine2
arcSquareStringStereoFM :: IO StringInstrument
arcSquareStringStereoFM = (forall r.
 T (T VectorSize Real) -> CodeGenFunction r (T (T VectorSize Real)))
-> IO StringInstrument
arcStringStereoFM T (T VectorSize Real) -> CodeGenFunction r (T (T VectorSize Real))
forall r.
T (T VectorSize Real) -> CodeGenFunction r (T (T VectorSize Real))
forall a r.
(PseudoRing a, IntegerConstant a, Fraction a) =>
a -> CodeGenFunction r a
WaveL.square
arcTriangleStringStereoFM :: IO StringInstrument
arcTriangleStringStereoFM = (forall r.
 T (T VectorSize Real) -> CodeGenFunction r (T (T VectorSize Real)))
-> IO StringInstrument
arcStringStereoFM T (T VectorSize Real) -> CodeGenFunction r (T (T VectorSize Real))
forall r.
T (T VectorSize Real) -> CodeGenFunction r (T (T VectorSize Real))
forall a r.
(PseudoRing a, RationalConstant a, Fraction a) =>
a -> CodeGenFunction r a
WaveL.triangle


fmStringStereoFM ::
   IO (SampleRate Real -> Real -> Real ->
       PIO.T
          (WithEnvelopeControl
             (Zip.T
                (Zip.T (Control Real) (Control Real))
                DetuneBendModControl))
          StereoChunk)
fmStringStereoFM :: IO
  (SampleRate Real
   -> Real
   -> Real
   -> T (WithEnvelopeControl
           (T (T (Control Real) (Control Real)) DetuneBendModControl))
        StereoChunk)
fmStringStereoFM =
   ((SampleRate Real
  -> T (T Chunk
          (T (T (Control Real) (Control Real)) DetuneBendModControl))
       StereoChunk)
 -> (SampleRate Real -> Real -> T EnvelopeControl Chunk)
 -> SampleRate Real
 -> Real
 -> Real
 -> T (WithEnvelopeControl
         (T (T (Control Real) (Control Real)) DetuneBendModControl))
      StereoChunk)
-> IO
     (SampleRate Real
      -> T (T Chunk
              (T (T (Control Real) (Control Real)) DetuneBendModControl))
           StereoChunk)
-> IO (SampleRate Real -> Real -> T EnvelopeControl Chunk)
-> IO
     (SampleRate Real
      -> Real
      -> Real
      -> T (WithEnvelopeControl
              (T (T (Control Real) (Control Real)) DetuneBendModControl))
           StereoChunk)
forall a b c. (a -> b -> c) -> IO a -> IO b -> IO c
forall (f :: * -> *) a b c.
Applicative f =>
(a -> b -> c) -> f a -> f b -> f c
liftA2
      (\SampleRate Real
-> T (T Chunk
        (T (T (Control Real) (Control Real)) DetuneBendModControl))
     StereoChunk
osc SampleRate Real -> Real -> T EnvelopeControl Chunk
env SampleRate Real
sr Real
vel Real
freq ->
         SampleRate Real
-> T (T Chunk
        (T (T (Control Real) (Control Real)) DetuneBendModControl))
     StereoChunk
osc SampleRate Real
sr
         T (T Chunk
     (T (T (Control Real) (Control Real)) DetuneBendModControl))
  StereoChunk
-> T (WithEnvelopeControl
        (T (T (Control Real) (Control Real)) DetuneBendModControl))
     (T Chunk
        (T (T (Control Real) (Control Real)) DetuneBendModControl))
-> T (WithEnvelopeControl
        (T (T (Control Real) (Control Real)) DetuneBendModControl))
     StereoChunk
forall b c a. T b c -> T a b -> T a c
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
.
         (T (T (T (Control Real) (Control Real)) DetuneBendModControl)
  (T (T (Control Real) (Control Real)) DetuneBendModControl)
-> T (T Chunk
        (T (T (Control Real) (Control Real)) DetuneBendModControl))
     (T Chunk
        (T (T (Control Real) (Control Real)) DetuneBendModControl))
forall (arrow :: * -> * -> *) a b c.
Arrow arrow =>
arrow a b -> arrow (T c a) (T c b)
Zip.arrowSecond (T (T (T (Control Real) (Control Real)) DetuneBendModControl)
   (T (T (Control Real) (Control Real)) DetuneBendModControl)
 -> T (T Chunk
         (T (T (Control Real) (Control Real)) DetuneBendModControl))
      (T Chunk
         (T (T (Control Real) (Control Real)) DetuneBendModControl)))
-> T (T (T (Control Real) (Control Real)) DetuneBendModControl)
     (T (T (Control Real) (Control Real)) DetuneBendModControl)
-> T (T Chunk
        (T (T (Control Real) (Control Real)) DetuneBendModControl))
     (T Chunk
        (T (T (Control Real) (Control Real)) DetuneBendModControl))
forall a b. (a -> b) -> a -> b
$ T DetuneBendModControl DetuneBendModControl
-> T (T (T (Control Real) (Control Real)) DetuneBendModControl)
     (T (T (Control Real) (Control Real)) DetuneBendModControl)
forall (arrow :: * -> * -> *) a b c.
Arrow arrow =>
arrow a b -> arrow (T c a) (T c b)
Zip.arrowSecond (T DetuneBendModControl DetuneBendModControl
 -> T (T (T (Control Real) (Control Real)) DetuneBendModControl)
      (T (T (Control Real) (Control Real)) DetuneBendModControl))
-> T DetuneBendModControl DetuneBendModControl
-> T (T (T (Control Real) (Control Real)) DetuneBendModControl)
     (T (T (Control Real) (Control Real)) DetuneBendModControl)
forall a b. (a -> b) -> a -> b
$
          T (T ShortStrictTime (T Real)) (T ShortStrictTime (T Real))
-> T DetuneBendModControl DetuneBendModControl
forall (arrow :: * -> * -> *) a b c.
Arrow arrow =>
arrow a b -> arrow (T c a) (T c b)
Zip.arrowSecond (T (T ShortStrictTime (T Real)) (T ShortStrictTime (T Real))
 -> T DetuneBendModControl DetuneBendModControl)
-> T (T ShortStrictTime (T Real)) (T ShortStrictTime (T Real))
-> T DetuneBendModControl DetuneBendModControl
forall a b. (a -> b) -> a -> b
$
            (T ShortStrictTime (T Real) -> T ShortStrictTime (T Real))
-> T (T ShortStrictTime (T Real)) (T ShortStrictTime (T Real))
forall b c. (b -> c) -> T b c
forall (a :: * -> * -> *) b c. Arrow a => (b -> c) -> a b c
arr ((T ShortStrictTime (T Real) -> T ShortStrictTime (T Real))
 -> T (T ShortStrictTime (T Real)) (T ShortStrictTime (T Real)))
-> (T ShortStrictTime (T Real) -> T ShortStrictTime (T Real))
-> T (T ShortStrictTime (T Real)) (T ShortStrictTime (T Real))
forall a b. (a -> b) -> a -> b
$ SampleRate Real
-> Real -> T ShortStrictTime (T Real) -> T ShortStrictTime (T Real)
forall (stream :: * -> *).
Functor stream =>
SampleRate Real -> Real -> stream (T Real) -> stream (T Real)
transposeModulation SampleRate Real
sr Real
freq)
         T (T Chunk
     (T (T (Control Real) (Control Real)) DetuneBendModControl))
  (T Chunk
     (T (T (Control Real) (Control Real)) DetuneBendModControl))
-> T (WithEnvelopeControl
        (T (T (Control Real) (Control Real)) DetuneBendModControl))
     (T Chunk
        (T (T (Control Real) (Control Real)) DetuneBendModControl))
-> T (WithEnvelopeControl
        (T (T (Control Real) (Control Real)) DetuneBendModControl))
     (T Chunk
        (T (T (Control Real) (Control Real)) DetuneBendModControl))
forall b c a. T b c -> T a b -> T a c
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
.
         T EnvelopeControl Chunk
-> T (WithEnvelopeControl
        (T (T (Control Real) (Control Real)) DetuneBendModControl))
     (T Chunk
        (T (T (Control Real) (Control Real)) DetuneBendModControl))
forall (arrow :: * -> * -> *) a b.
(Arrow arrow, Transform a, Transform b) =>
arrow EnvelopeControl a -> arrow (WithEnvelopeControl b) (T a b)
zipEnvelope (SampleRate Real -> Real -> T EnvelopeControl Chunk
env SampleRate Real
sr Real
vel))
      (DSL
  (SampleRate Real
   -> T (T Chunk
           (T (T (Control Real) (Control Real)) DetuneBendModControl))
        StereoChunk)
  (Element
     (In
        (SampleRate Real
         -> T (T Chunk
                 (T (T (Control Real) (Control Real)) DetuneBendModControl))
              StereoChunk)))
  (Element
     (Out
        (SampleRate Real
         -> T (T Chunk
                 (T (T (Control Real) (Control Real)) DetuneBendModControl))
              StereoChunk)))
-> IO
     (SampleRate Real
      -> T (T Chunk
              (T (T (Control Real) (Control Real)) DetuneBendModControl))
           StereoChunk)
forall f a al b bl.
(Run f, In f ~ a, Default a, Element a ~ al, Out f ~ b, Default b,
 Element b ~ bl) =>
DSL f al bl -> IO f
CausalRender.run (DSL
   (SampleRate Real
    -> T (T Chunk
            (T (T (Control Real) (Control Real)) DetuneBendModControl))
         StereoChunk)
   (Element
      (In
         (SampleRate Real
          -> T (T Chunk
                  (T (T (Control Real) (Control Real)) DetuneBendModControl))
               StereoChunk)))
   (Element
      (Out
         (SampleRate Real
          -> T (T Chunk
                  (T (T (Control Real) (Control Real)) DetuneBendModControl))
               StereoChunk)))
 -> IO
      (SampleRate Real
       -> T (T Chunk
               (T (T (Control Real) (Control Real)) DetuneBendModControl))
            StereoChunk))
-> DSL
     (SampleRate Real
      -> T (T Chunk
              (T (T (Control Real) (Control Real)) DetuneBendModControl))
           StereoChunk)
     (Element
        (In
           (SampleRate Real
            -> T (T Chunk
                    (T (T (Control Real) (Control Real)) DetuneBendModControl))
                 StereoChunk)))
     (Element
        (Out
           (SampleRate Real
            -> T (T Chunk
                    (T (T (Control Real) (Control Real)) DetuneBendModControl))
                 StereoChunk)))
-> IO
     (SampleRate Real
      -> T (T Chunk
              (T (T (Control Real) (Control Real)) DetuneBendModControl))
           StereoChunk)
forall a b. (a -> b) -> a -> b
$
       (SampleRate (Exp Real) -> Exp Real -> Exp Real)
-> Exp Real
-> (Exp Real
    -> SampleRate (Exp Real)
    -> T (T (T VectorSize Real),
          ((T Real, T Real), (T Real, T (T Real))))
         (T (T (T VectorSize Real))))
-> SampleRate (Exp Real)
-> T (T (T VectorSize Real),
      ((T Real, T Real), (T Real, T (T Real))))
     (T (T (T VectorSize Real)))
forall a b c d.
(SampleRate a -> b -> c)
-> b -> (c -> SampleRate a -> d) -> SampleRate a -> d
constant SampleRate (Exp Real) -> Exp Real -> Exp Real
forall a. C a => SampleRate a -> a -> a
frequency Exp Real
5 ((Exp Real
  -> SampleRate (Exp Real)
  -> T (T (T VectorSize Real),
        ((T Real, T Real), (T Real, T (T Real))))
       (T (T (T VectorSize Real))))
 -> SampleRate (Exp Real)
 -> T (T (T VectorSize Real),
       ((T Real, T Real), (T Real, T (T Real))))
      (T (T (T VectorSize Real))))
-> (Exp Real
    -> SampleRate (Exp Real)
    -> T (T (T VectorSize Real),
          ((T Real, T Real), (T Real, T (T Real))))
         (T (T (T VectorSize Real))))
-> SampleRate (Exp Real)
-> T (T (T VectorSize Real),
      ((T Real, T Real), (T Real, T (T Real))))
     (T (T (T VectorSize Real)))
forall a b. (a -> b) -> a -> b
$ \Exp Real
speed SampleRate (Exp Real)
_sr ->
         ((Arguments
   (T (T (T VectorSize Real),
       ((T Real, T Real), (T Real, T (T Real)))))
   (T (T VectorSize Real), ((T Real, T Real), (T Real, T (T Real))))
 -> T (T (T VectorSize Real),
       ((T Real, T Real), (T Real, T (T Real))))
      (T (T (T VectorSize Real))))
-> T (T (T VectorSize Real),
      ((T Real, T Real), (T Real, T (T Real))))
     (T (T (T VectorSize Real)))
forall inp out.
MakeArguments inp =>
(Arguments (T inp) inp -> T inp out) -> T inp out
F.withArgs ((Arguments
    (T (T (T VectorSize Real),
        ((T Real, T Real), (T Real, T (T Real)))))
    (T (T VectorSize Real), ((T Real, T Real), (T Real, T (T Real))))
  -> T (T (T VectorSize Real),
        ((T Real, T Real), (T Real, T (T Real))))
       (T (T (T VectorSize Real))))
 -> T (T (T VectorSize Real),
       ((T Real, T Real), (T Real, T (T Real))))
      (T (T (T VectorSize Real))))
-> (Arguments
      (T (T (T VectorSize Real),
          ((T Real, T Real), (T Real, T (T Real)))))
      (T (T VectorSize Real), ((T Real, T Real), (T Real, T (T Real))))
    -> T (T (T VectorSize Real),
          ((T Real, T Real), (T Real, T (T Real))))
         (T (T (T VectorSize Real))))
-> T (T (T VectorSize Real),
      ((T Real, T Real), (T Real, T (T Real))))
     (T (T (T VectorSize Real)))
forall a b. (a -> b) -> a -> b
$ \(T (T (T VectorSize Real), ((T Real, T Real), (T Real, T (T Real))))
  (T (T VectorSize Real))
env,((T (T (T VectorSize Real), ((T Real, T Real), (T Real, T (T Real))))
  (T Real)
depth0,T (T (T VectorSize Real), ((T Real, T Real), (T Real, T (T Real))))
  (T Real)
shape0),(T (T (T VectorSize Real), ((T Real, T Real), (T Real, T (T Real))))
  (T Real)
det0,T (T (T VectorSize Real), ((T Real, T Real), (T Real, T (T Real))))
  (T (T Real))
fm))) ->
          let det :: T (T (T VectorSize Real), ((T Real, T Real), (T Real, T (T Real))))
  (T (T VectorSize Real))
det = (Exp Real -> Exp (T VectorSize Real))
-> T (T Real) (T (T VectorSize Real))
forall ae a be b.
(Aggregate ae a, Aggregate be b) =>
(ae -> be) -> T a b
Causal.map Exp Real -> Exp (T VectorSize Real)
forall n a. (Positive n, C a) => Exp a -> Exp (T n a)
Serial.upsample T (T Real) (T (T VectorSize Real))
-> T (T (T VectorSize Real),
      ((T Real, T Real), (T Real, T (T Real))))
     (T Real)
-> T (T (T VectorSize Real),
      ((T Real, T Real), (T Real, T (T Real))))
     (T (T VectorSize Real))
forall b c a. T b c -> T a b -> T a c
$& T (T (T VectorSize Real), ((T Real, T Real), (T Real, T (T Real))))
  (T Real)
det0
              shape :: T (T (T VectorSize Real), ((T Real, T Real), (T Real, T (T Real))))
  (T (T VectorSize Real))
shape = (Exp Real -> Exp (T VectorSize Real))
-> T (T Real) (T (T VectorSize Real))
forall ae a be b.
(Aggregate ae a, Aggregate be b) =>
(ae -> be) -> T a b
Causal.map Exp Real -> Exp (T VectorSize Real)
forall n a. (Positive n, C a) => Exp a -> Exp (T n a)
Serial.upsample T (T Real) (T (T VectorSize Real))
-> T (T (T VectorSize Real),
      ((T Real, T Real), (T Real, T (T Real))))
     (T Real)
-> T (T (T VectorSize Real),
      ((T Real, T Real), (T Real, T (T Real))))
     (T (T VectorSize Real))
forall b c a. T b c -> T a b -> T a c
$& T (T (T VectorSize Real), ((T Real, T Real), (T Real, T (T Real))))
  (T Real)
shape0
              depth :: T (T (T VectorSize Real), ((T Real, T Real), (T Real, T (T Real))))
  (T (T VectorSize Real))
depth =
                 T (T (T VectorSize Real), T (T VectorSize Real))
  (T (T VectorSize Real))
forall a. PseudoRing a => T (a, a) a
Causal.envelope T (T (T VectorSize Real), T (T VectorSize Real))
  (T (T VectorSize Real))
-> T (T (T VectorSize Real),
      ((T Real, T Real), (T Real, T (T Real))))
     (T (T VectorSize Real), T (T VectorSize Real))
-> T (T (T VectorSize Real),
      ((T Real, T Real), (T Real, T (T Real))))
     (T (T VectorSize Real))
forall b c a. T b c -> T a b -> T a c
$&
                    T (T (T VectorSize Real), ((T Real, T Real), (T Real, T (T Real))))
  (T (T VectorSize Real))
env T (T (T VectorSize Real), ((T Real, T Real), (T Real, T (T Real))))
  (T (T VectorSize Real))
-> T (T (T VectorSize Real),
      ((T Real, T Real), (T Real, T (T Real))))
     (T (T VectorSize Real))
-> T (T (T VectorSize Real),
      ((T Real, T Real), (T Real, T (T Real))))
     (T (T VectorSize Real), T (T VectorSize Real))
forall a b c. T a b -> T a c -> T a (b, c)
&|&
                    ((Exp Real -> Exp (T VectorSize Real))
-> T (T Real) (T (T VectorSize Real))
forall ae a be b.
(Aggregate ae a, Aggregate be b) =>
(ae -> be) -> T a b
Causal.map Exp Real -> Exp (T VectorSize Real)
forall n a. (Positive n, C a) => Exp a -> Exp (T n a)
Serial.upsample T (T Real) (T (T VectorSize Real))
-> T (T (T VectorSize Real),
      ((T Real, T Real), (T Real, T (T Real))))
     (T Real)
-> T (T (T VectorSize Real),
      ((T Real, T Real), (T Real, T (T Real))))
     (T (T VectorSize Real))
forall b c a. T b c -> T a b -> T a c
$& T (T (T VectorSize Real), ((T Real, T Real), (T Real, T (T Real))))
  (T Real)
depth0)
              modu :: T (T (T VectorSize Real), ((T Real, T Real), (T Real, T (T Real))))
  (T (T VectorSize Real))
modu = Exp Real
-> T (T (T VectorSize Real),
      ((T Real, T Real), (T Real, T (T Real))))
     (T (T Real))
-> T (T (T VectorSize Real),
      ((T Real, T Real), (T Real, T (T Real))))
     (T (T VectorSize Real))
forall inp.
Exp Real -> T inp (T (T Real)) -> T inp (T (T VectorSize Real))
frequencyFromBendModulationPacked Exp Real
speed T (T (T VectorSize Real), ((T Real, T Real), (T Real, T (T Real))))
  (T (T Real))
fm

              osci ::
                 Exp Real ->
                 Exp Real ->
                 Causal.T
                    ((VectorValue, VectorValue)
                          {- phase modulation depth, modulator distortion -},
                     (VectorValue, VectorValue)
                          {- detune, frequency modulation -})
                    VectorValue
              osci :: Exp Real
-> Exp Real
-> T ((T (T VectorSize Real), T (T VectorSize Real)),
      (T (T VectorSize Real), T (T VectorSize Real)))
     (T (T VectorSize Real))
osci Exp Real
p Exp Real
d =
                 (forall r.
 T (T VectorSize Real) -> CodeGenFunction r (T (T VectorSize Real)))
-> T (T (T VectorSize Real), T (T VectorSize Real))
     (T (T VectorSize Real))
forall n t y.
(Positive n, C t, Fraction t) =>
(forall r. Serial n t -> CodeGenFunction r y)
-> T (Serial n t, Serial n t) y
CausalPS.osci T (T VectorSize Real) -> CodeGenFunction r (T (T VectorSize Real))
forall r.
T (T VectorSize Real) -> CodeGenFunction r (T (T VectorSize Real))
forall a r.
(PseudoRing a, IntegerConstant a, Fraction a) =>
a -> CodeGenFunction r a
WaveL.approxSine2
                 T (T (T VectorSize Real), T (T VectorSize Real))
  (T (T VectorSize Real))
-> T ((T (T VectorSize Real), T (T VectorSize Real)),
      (T (T VectorSize Real), T (T VectorSize Real)))
     (T (T VectorSize Real), T (T VectorSize Real))
-> T ((T (T VectorSize Real), T (T VectorSize Real)),
      (T (T VectorSize Real), T (T VectorSize Real)))
     (T (T VectorSize Real))
forall b c a. T b c -> T a b -> T a c
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
.
                 ((T (T (T VectorSize Real), T (T VectorSize Real))
  (T (T VectorSize Real))
forall a. PseudoRing a => T (a, a) a
Causal.envelope
                  T (T (T VectorSize Real), T (T VectorSize Real))
  (T (T VectorSize Real))
-> T (T (T VectorSize Real),
      (T (T VectorSize Real), T (T VectorSize Real)))
     (T (T VectorSize Real), T (T VectorSize Real))
-> T (T (T VectorSize Real),
      (T (T VectorSize Real), T (T VectorSize Real)))
     (T (T VectorSize Real))
forall b c a. T b c -> T a b -> T a c
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
.
                  T (T (T VectorSize Real), T (T VectorSize Real))
  (T (T VectorSize Real))
-> T (T (T VectorSize Real),
      (T (T VectorSize Real), T (T VectorSize Real)))
     (T (T VectorSize Real), T (T VectorSize Real))
forall b c d. T b c -> T (d, b) (d, c)
forall (a :: * -> * -> *) b c d.
Arrow a =>
a b c -> a (d, b) (d, c)
second
                     ((forall r.
 T (T VectorSize Real)
 -> T (T VectorSize Real)
 -> CodeGenFunction r (T (T VectorSize Real)))
-> T (T (T VectorSize Real),
      (T (T VectorSize Real), T (T VectorSize Real)))
     (T (T VectorSize Real))
forall n t c y.
(Positive n, C t, Fraction t) =>
(forall r. c -> Serial n t -> CodeGenFunction r y)
-> T (c, (Serial n t, Serial n t)) y
CausalPS.shapeModOsci T (T VectorSize Real)
-> T (T VectorSize Real)
-> CodeGenFunction r (T (T VectorSize Real))
forall r.
T (T VectorSize Real)
-> T (T VectorSize Real)
-> CodeGenFunction r (T (T VectorSize Real))
forall a r.
(Field a, RationalConstant a, Real a) =>
a -> a -> CodeGenFunction r a
WaveL.rationalApproxSine1
                        T (T (T VectorSize Real),
   (T (T VectorSize Real), T (T VectorSize Real)))
  (T (T VectorSize Real))
-> T (T (T VectorSize Real), T (T VectorSize Real))
     (T (T VectorSize Real),
      (T (T VectorSize Real), T (T VectorSize Real)))
-> T (T (T VectorSize Real), T (T VectorSize Real))
     (T (T VectorSize Real))
forall b c a. T b c -> T a b -> T a c
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. T (T (T VectorSize Real))
  (T (T VectorSize Real), T (T VectorSize Real))
-> T (T (T VectorSize Real), T (T VectorSize Real))
     (T (T VectorSize Real),
      (T (T VectorSize Real), T (T VectorSize Real)))
forall b c d. T b c -> T (d, b) (d, c)
forall (a :: * -> * -> *) b c d.
Arrow a =>
a b c -> a (d, b) (d, c)
second (SignalOf T (T (T VectorSize Real))
-> T (T (T VectorSize Real))
     (T (T VectorSize Real), T (T VectorSize Real))
forall (process :: * -> * -> *) a b.
C process =>
SignalOf process a -> process b (a, b)
CausalClass.feedFst (Exp Real -> T (T (T VectorSize Real))
forall n a. Vector n a => Exp a -> T (Serial n a)
SigPS.constant Exp Real
p)))
                  T (T (T VectorSize Real),
   (T (T VectorSize Real), T (T VectorSize Real)))
  (T (T VectorSize Real))
-> (((T (T VectorSize Real), T (T VectorSize Real)),
     T (T VectorSize Real))
    -> (T (T VectorSize Real),
        (T (T VectorSize Real), T (T VectorSize Real))))
-> T ((T (T VectorSize Real), T (T VectorSize Real)),
      T (T VectorSize Real))
     (T (T VectorSize Real))
forall (a :: * -> * -> *) c d b.
Arrow a =>
a c d -> (b -> c) -> a b d
<<^
                  (\((T (T VectorSize Real)
dp, T (T VectorSize Real)
ds), T (T VectorSize Real)
f) -> (T (T VectorSize Real)
dp, (T (T VectorSize Real)
ds, T (T VectorSize Real)
f))))
                  T ((T (T VectorSize Real), T (T VectorSize Real)),
   T (T VectorSize Real))
  (T (T VectorSize Real))
-> T ((T (T VectorSize Real), T (T VectorSize Real)),
      T (T VectorSize Real))
     (T (T VectorSize Real))
-> T ((T (T VectorSize Real), T (T VectorSize Real)),
      T (T VectorSize Real))
     (T (T VectorSize Real), T (T VectorSize Real))
forall b c c'. T b c -> T b c' -> T b (c, c')
forall (a :: * -> * -> *) b c c'.
Arrow a =>
a b c -> a b c' -> a b (c, c')
&&& (((T (T VectorSize Real), T (T VectorSize Real)),
  T (T VectorSize Real))
 -> T (T VectorSize Real))
-> T ((T (T VectorSize Real), T (T VectorSize Real)),
      T (T VectorSize Real))
     (T (T VectorSize Real))
forall b c. (b -> c) -> T b c
forall (a :: * -> * -> *) b c. Arrow a => (b -> c) -> a b c
arr ((T (T VectorSize Real), T (T VectorSize Real)),
 T (T VectorSize Real))
-> T (T VectorSize Real)
forall a b. (a, b) -> b
snd)
                 T ((T (T VectorSize Real), T (T VectorSize Real)),
   T (T VectorSize Real))
  (T (T VectorSize Real), T (T VectorSize Real))
-> T ((T (T VectorSize Real), T (T VectorSize Real)),
      (T (T VectorSize Real), T (T VectorSize Real)))
     ((T (T VectorSize Real), T (T VectorSize Real)),
      T (T VectorSize Real))
-> T ((T (T VectorSize Real), T (T VectorSize Real)),
      (T (T VectorSize Real), T (T VectorSize Real)))
     (T (T VectorSize Real), T (T VectorSize Real))
forall b c a. T b c -> T a b -> T a c
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
.
                 T (T (T VectorSize Real), T (T VectorSize Real))
  (T (T VectorSize Real))
-> T ((T (T VectorSize Real), T (T VectorSize Real)),
      (T (T VectorSize Real), T (T VectorSize Real)))
     ((T (T VectorSize Real), T (T VectorSize Real)),
      T (T VectorSize Real))
forall b c d. T b c -> T (d, b) (d, c)
forall (a :: * -> * -> *) b c d.
Arrow a =>
a b c -> a (d, b) (d, c)
second
                    (T (T (T VectorSize Real), T (T VectorSize Real))
  (T (T VectorSize Real))
forall a. PseudoRing a => T (a, a) a
Causal.envelope T (T (T VectorSize Real), T (T VectorSize Real))
  (T (T VectorSize Real))
-> T (T (T VectorSize Real), T (T VectorSize Real))
     (T (T VectorSize Real), T (T VectorSize Real))
-> T (T (T VectorSize Real), T (T VectorSize Real))
     (T (T VectorSize Real))
forall b c a. T b c -> T a b -> T a c
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
.
                     T (T (T VectorSize Real)) (T (T VectorSize Real))
-> T (T (T VectorSize Real), T (T VectorSize Real))
     (T (T VectorSize Real), T (T VectorSize Real))
forall b c d. T b c -> T (b, d) (c, d)
forall (a :: * -> * -> *) b c d.
Arrow a =>
a b c -> a (b, d) (c, d)
first (T (T (T VectorSize Real)) (T (T VectorSize Real))
forall a. C a => a
one T (T (T VectorSize Real)) (T (T VectorSize Real))
-> T (T (T VectorSize Real)) (T (T VectorSize Real))
-> T (T (T VectorSize Real)) (T (T VectorSize Real))
forall a. C a => a -> a -> a
+ Exp Real -> T (T (T VectorSize Real)) (T (T VectorSize Real))
forall n a.
(Positive n, PseudoRing a) =>
Exp a -> T (Serial n a) (Serial n a)
CausalPS.amplify Exp Real
d))

          in  T (T (T VectorSize Real)) -> T (T (T VectorSize Real))
forall a. T (T a) -> T (T a)
Stereo.multiValue (T (T (T VectorSize Real)) -> T (T (T VectorSize Real)))
-> T (T (T VectorSize Real), T (T (T VectorSize Real)))
     (T (T (T VectorSize Real)))
-> T (T (T VectorSize Real), T (T (T VectorSize Real)))
     (T (T (T VectorSize Real)))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$>
              T (T (T VectorSize Real), T (T (T VectorSize Real)))
  (T (T (T VectorSize Real)))
forall a. PseudoRing a => T (a, T a) (T a)
Causal.envelopeStereo T (T (T VectorSize Real), T (T (T VectorSize Real)))
  (T (T (T VectorSize Real)))
-> T (T (T VectorSize Real),
      ((T Real, T Real), (T Real, T (T Real))))
     (T (T VectorSize Real), T (T (T VectorSize Real)))
-> T (T (T VectorSize Real),
      ((T Real, T Real), (T Real, T (T Real))))
     (T (T (T VectorSize Real)))
forall b c a. T b c -> T a b -> T a c
$&
                 T (T (T VectorSize Real), ((T Real, T Real), (T Real, T (T Real))))
  (T (T VectorSize Real))
env T (T (T VectorSize Real), ((T Real, T Real), (T Real, T (T Real))))
  (T (T VectorSize Real))
-> T (T (T VectorSize Real),
      ((T Real, T Real), (T Real, T (T Real))))
     (T (T (T VectorSize Real)))
-> T (T (T VectorSize Real),
      ((T Real, T Real), (T Real, T (T Real))))
     (T (T VectorSize Real), T (T (T VectorSize Real)))
forall a b c. T a b -> T a c -> T a (b, c)
&|&
                 ((Exp Real
 -> Exp Real
 -> T ((T (T VectorSize Real), T (T VectorSize Real)),
       (T (T VectorSize Real), T (T VectorSize Real)))
      (T (T VectorSize Real)))
-> T ((T (T VectorSize Real), T (T VectorSize Real)),
      (T (T VectorSize Real), T (T VectorSize Real)))
     (T (T (T VectorSize Real)))
forall a.
(Exp Real -> Exp Real -> T a (T (T VectorSize Real)))
-> T a (T (T (T VectorSize Real)))
phaserOsci Exp Real
-> Exp Real
-> T ((T (T VectorSize Real), T (T VectorSize Real)),
      (T (T VectorSize Real), T (T VectorSize Real)))
     (T (T VectorSize Real))
osci T ((T (T VectorSize Real), T (T VectorSize Real)),
   (T (T VectorSize Real), T (T VectorSize Real)))
  (T (T (T VectorSize Real)))
-> T (T (T VectorSize Real),
      ((T Real, T Real), (T Real, T (T Real))))
     ((T (T VectorSize Real), T (T VectorSize Real)),
      (T (T VectorSize Real), T (T VectorSize Real)))
-> T (T (T VectorSize Real),
      ((T Real, T Real), (T Real, T (T Real))))
     (T (T (T VectorSize Real)))
forall b c a. T b c -> T a b -> T a c
$&  (T (T (T VectorSize Real), ((T Real, T Real), (T Real, T (T Real))))
  (T (T VectorSize Real))
depth T (T (T VectorSize Real), ((T Real, T Real), (T Real, T (T Real))))
  (T (T VectorSize Real))
-> T (T (T VectorSize Real),
      ((T Real, T Real), (T Real, T (T Real))))
     (T (T VectorSize Real))
-> T (T (T VectorSize Real),
      ((T Real, T Real), (T Real, T (T Real))))
     (T (T VectorSize Real), T (T VectorSize Real))
forall a b c. T a b -> T a c -> T a (b, c)
&|& T (T (T VectorSize Real), ((T Real, T Real), (T Real, T (T Real))))
  (T (T VectorSize Real))
shape) T (T (T VectorSize Real), ((T Real, T Real), (T Real, T (T Real))))
  (T (T VectorSize Real), T (T VectorSize Real))
-> T (T (T VectorSize Real),
      ((T Real, T Real), (T Real, T (T Real))))
     (T (T VectorSize Real), T (T VectorSize Real))
-> T (T (T VectorSize Real),
      ((T Real, T Real), (T Real, T (T Real))))
     ((T (T VectorSize Real), T (T VectorSize Real)),
      (T (T VectorSize Real), T (T VectorSize Real)))
forall a b c. T a b -> T a c -> T a (b, c)
&|& (T (T (T VectorSize Real), ((T Real, T Real), (T Real, T (T Real))))
  (T (T VectorSize Real))
det T (T (T VectorSize Real), ((T Real, T Real), (T Real, T (T Real))))
  (T (T VectorSize Real))
-> T (T (T VectorSize Real),
      ((T Real, T Real), (T Real, T (T Real))))
     (T (T VectorSize Real))
-> T (T (T VectorSize Real),
      ((T Real, T Real), (T Real, T (T Real))))
     (T (T VectorSize Real), T (T VectorSize Real))
forall a b c. T a b -> T a c -> T a (b, c)
&|& T (T (T VectorSize Real), ((T Real, T Real), (T Real, T (T Real))))
  (T (T VectorSize Real))
modu))))
      IO (SampleRate Real -> Real -> T EnvelopeControl Chunk)
stringControlledEnvelope



sampledSound ::
   IO (Sample.T ->
       SampleRate Real -> Real -> Real ->
       PIO.T
          (Zip.T MIO.GateChunk DetuneBendModControl)
          StereoChunk)
sampledSound :: IO
  (T
   -> SampleRate Real
   -> Real
   -> Real
   -> T (T GateChunk DetuneBendModControl) StereoChunk)
sampledSound =
   ((SampleRate Real
  -> (Real, Vector Real) -> T StereoChunk StereoChunk)
 -> (SampleRate Real -> T DetuneBendModControl StereoChunk)
 -> T
 -> SampleRate Real
 -> Real
 -> Real
 -> T (T GateChunk DetuneBendModControl) StereoChunk)
-> IO
     (SampleRate Real
      -> (Real, Vector Real) -> T StereoChunk StereoChunk)
-> IO (SampleRate Real -> T DetuneBendModControl StereoChunk)
-> IO
     (T
      -> SampleRate Real
      -> Real
      -> Real
      -> T (T GateChunk DetuneBendModControl) StereoChunk)
forall a b c. (a -> b -> c) -> IO a -> IO b -> IO c
forall (f :: * -> *) a b c.
Applicative f =>
(a -> b -> c) -> f a -> f b -> f c
liftA2
      (\SampleRate Real -> (Real, Vector Real) -> T StereoChunk StereoChunk
osc SampleRate Real -> T DetuneBendModControl StereoChunk
freqMod T
smp SampleRate Real
sr Real
vel Real
freq ->
         let pos :: Positions
pos = T -> Positions
Sample.positions T
smp
         in  (SampleRate Real
 -> (Real, Vector Real) -> T StereoChunk StereoChunk)
-> T
-> SampleRate Real
-> Real
-> T (T GateChunk StereoChunk) StereoChunk
forall a b gate.
(Transform a, Transform b) =>
(SampleRate Real -> (Real, Vector Real) -> T a b)
-> T -> SampleRate Real -> Real -> T (T (Chunk gate) a) b
assembleParts SampleRate Real -> (Real, Vector Real) -> T StereoChunk StereoChunk
osc T
smp SampleRate Real
sr Real
vel
             T (T GateChunk StereoChunk) StereoChunk
-> T (T GateChunk DetuneBendModControl) (T GateChunk StereoChunk)
-> T (T GateChunk DetuneBendModControl) StereoChunk
forall b c a. T b c -> T a b -> T a c
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
.
             T DetuneBendModControl StereoChunk
-> T (T GateChunk DetuneBendModControl) (T GateChunk StereoChunk)
forall (arrow :: * -> * -> *) a b c.
Arrow arrow =>
arrow a b -> arrow (T c a) (T c b)
Zip.arrowSecond
                ((T StereoChunk StereoChunk
forall a. T a a
forall {k} (cat :: k -> k -> *) (a :: k). Category cat => cat a a
id :: PIOId StereoChunk)
                 T StereoChunk StereoChunk
-> T DetuneBendModControl StereoChunk
-> T DetuneBendModControl StereoChunk
forall b c a. T b c -> T a b -> T a c
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
.
                 SampleRate Real -> T DetuneBendModControl StereoChunk
freqMod SampleRate Real
sr
                 T DetuneBendModControl StereoChunk
-> T DetuneBendModControl DetuneBendModControl
-> T DetuneBendModControl StereoChunk
forall b c a. T b c -> T a b -> T a c
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
.
                 (T (T ShortStrictTime (T Real)) (T ShortStrictTime (T Real))
-> T DetuneBendModControl DetuneBendModControl
forall (arrow :: * -> * -> *) a b c.
Arrow arrow =>
arrow a b -> arrow (T c a) (T c b)
Zip.arrowSecond (T (T ShortStrictTime (T Real)) (T ShortStrictTime (T Real))
 -> T DetuneBendModControl DetuneBendModControl)
-> T (T ShortStrictTime (T Real)) (T ShortStrictTime (T Real))
-> T DetuneBendModControl DetuneBendModControl
forall a b. (a -> b) -> a -> b
$ (T ShortStrictTime (T Real) -> T ShortStrictTime (T Real))
-> T (T ShortStrictTime (T Real)) (T ShortStrictTime (T Real))
forall b c. (b -> c) -> T b c
forall (a :: * -> * -> *) b c. Arrow a => (b -> c) -> a b c
arr ((T ShortStrictTime (T Real) -> T ShortStrictTime (T Real))
 -> T (T ShortStrictTime (T Real)) (T ShortStrictTime (T Real)))
-> (T ShortStrictTime (T Real) -> T ShortStrictTime (T Real))
-> T (T ShortStrictTime (T Real)) (T ShortStrictTime (T Real))
forall a b. (a -> b) -> a -> b
$
                    SampleRate Real
-> Real -> T ShortStrictTime (T Real) -> T ShortStrictTime (T Real)
forall (stream :: * -> *).
Functor stream =>
SampleRate Real -> Real -> stream (T Real) -> stream (T Real)
transposeModulation SampleRate Real
sr (Real
freq Real -> Real -> Real
forall a. C a => a -> a -> a
* Positions -> Real
Sample.period Positions
pos))))
      (DSL
  (SampleRate Real
   -> (Real, Vector Real) -> T StereoChunk StereoChunk)
  (T (T (T VectorSize Real)))
  (T (T (T VectorSize Real)))
-> IO
     (SampleRate Real
      -> (Real, Vector Real) -> T StereoChunk StereoChunk)
forall f a al b bl.
(Run f, In f ~ a, Default a, Element a ~ al, Out f ~ b, Default b,
 Element b ~ bl) =>
DSL f al bl -> IO f
CausalRender.run (DSL
   (SampleRate Real
    -> (Real, Vector Real) -> T StereoChunk StereoChunk)
   (T (T (T VectorSize Real)))
   (T (T (T VectorSize Real)))
 -> IO
      (SampleRate Real
       -> (Real, Vector Real) -> T StereoChunk StereoChunk))
-> DSL
     (SampleRate Real
      -> (Real, Vector Real) -> T StereoChunk StereoChunk)
     (T (T (T VectorSize Real)))
     (T (T (T VectorSize Real)))
-> IO
     (SampleRate Real
      -> (Real, Vector Real) -> T StereoChunk StereoChunk)
forall a b. (a -> b) -> a -> b
$ \SampleRate (Exp Real)
sr (Exp Real
amp, T (T Real)
smp) ->
         T (T (T VectorSize Real)) -> T (T (T VectorSize Real))
forall a. T (T a) -> T (T a)
Stereo.multiValue
         (T (T (T VectorSize Real)) -> T (T (T VectorSize Real)))
-> T (T (T (T VectorSize Real))) (T (T (T VectorSize Real)))
-> T (T (T (T VectorSize Real))) (T (T (T VectorSize Real)))
forall (a :: * -> * -> *) c d b.
Arrow a =>
(c -> d) -> a b c -> a b d
^<<
         T (T (T VectorSize Real)) (T (T VectorSize Real))
-> T (T (T (T VectorSize Real))) (T (T (T VectorSize Real)))
forall a b.
(Phi a, Undefined a, Phi b, Undefined b) =>
T a b -> T (T a) (T b)
Causal.stereoFromMono (SampleRate (Exp Real)
-> (Exp Real, T (T Real))
-> T (T (T VectorSize Real)) (T (T VectorSize Real))
resamplingProc SampleRate (Exp Real)
sr (Exp Real
amp, T (T Real)
smp))
         T (T (T (T VectorSize Real))) (T (T (T VectorSize Real)))
-> (T (T (T VectorSize Real)) -> T (T (T VectorSize Real)))
-> T (T (T (T VectorSize Real))) (T (T (T VectorSize Real)))
forall (a :: * -> * -> *) c d b.
Arrow a =>
a c d -> (b -> c) -> a b d
<<^
         T (T (T VectorSize Real)) -> T (T (T VectorSize Real))
forall a. T (T a) -> T (T a)
Stereo.unMultiValue)
      (DSL
  (SampleRate Real -> T DetuneBendModControl StereoChunk)
  (Element
     (In (SampleRate Real -> T DetuneBendModControl StereoChunk)))
  (Element
     (Out (SampleRate Real -> T DetuneBendModControl StereoChunk)))
-> IO (SampleRate Real -> T DetuneBendModControl StereoChunk)
forall f a al b bl.
(Run f, In f ~ a, Default a, Element a ~ al, Out f ~ b, Default b,
 Element b ~ bl) =>
DSL f al bl -> IO f
CausalRender.run (DSL
   (SampleRate Real -> T DetuneBendModControl StereoChunk)
   (Element
      (In (SampleRate Real -> T DetuneBendModControl StereoChunk)))
   (Element
      (Out (SampleRate Real -> T DetuneBendModControl StereoChunk)))
 -> IO (SampleRate Real -> T DetuneBendModControl StereoChunk))
-> DSL
     (SampleRate Real -> T DetuneBendModControl StereoChunk)
     (Element
        (In (SampleRate Real -> T DetuneBendModControl StereoChunk)))
     (Element
        (Out (SampleRate Real -> T DetuneBendModControl StereoChunk)))
-> IO (SampleRate Real -> T DetuneBendModControl StereoChunk)
forall a b. (a -> b) -> a -> b
$
       (SampleRate (Exp Real) -> Exp Real -> Exp Real)
-> Exp Real
-> (Exp Real
    -> SampleRate (Exp Real)
    -> T (T Real, T (T Real)) (T (T (T VectorSize Real))))
-> SampleRate (Exp Real)
-> T (T Real, T (T Real)) (T (T (T VectorSize Real)))
forall a b c d.
(SampleRate a -> b -> c)
-> b -> (c -> SampleRate a -> d) -> SampleRate a -> d
constant SampleRate (Exp Real) -> Exp Real -> Exp Real
forall a. C a => SampleRate a -> a -> a
frequency Exp Real
3 ((Exp Real
  -> SampleRate (Exp Real)
  -> T (T Real, T (T Real)) (T (T (T VectorSize Real))))
 -> SampleRate (Exp Real)
 -> T (T Real, T (T Real)) (T (T (T VectorSize Real))))
-> (Exp Real
    -> SampleRate (Exp Real)
    -> T (T Real, T (T Real)) (T (T (T VectorSize Real))))
-> SampleRate (Exp Real)
-> T (T Real, T (T Real)) (T (T (T VectorSize Real)))
forall a b. (a -> b) -> a -> b
$ \Exp Real
speed SampleRate (Exp Real)
_sr ->
         (T (T (T VectorSize Real)) -> T (T (T VectorSize Real)))
-> T (T Real, T (T Real)) (T (T (T VectorSize Real)))
-> T (T Real, T (T Real)) (T (T (T VectorSize Real)))
forall a b.
(a -> b) -> T (T Real, T (T Real)) a -> T (T Real, T (T Real)) b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap T (T (T VectorSize Real)) -> T (T (T VectorSize Real))
forall a. T (T a) -> T (T a)
Stereo.multiValue (T (T Real, T (T Real)) (T (T (T VectorSize Real)))
 -> T (T Real, T (T Real)) (T (T (T VectorSize Real))))
-> T (T Real, T (T Real)) (T (T (T VectorSize Real)))
-> T (T Real, T (T Real)) (T (T (T VectorSize Real)))
forall a b. (a -> b) -> a -> b
$
         (Arguments (T (T Real, T (T Real))) (T Real, T (T Real))
 -> T (T Real, T (T Real)) (T (T (T VectorSize Real))))
-> T (T Real, T (T Real)) (T (T (T VectorSize Real)))
forall inp out.
MakeArguments inp =>
(Arguments (T inp) inp -> T inp out) -> T inp out
F.withArgs ((Arguments (T (T Real, T (T Real))) (T Real, T (T Real))
  -> T (T Real, T (T Real)) (T (T (T VectorSize Real))))
 -> T (T Real, T (T Real)) (T (T (T VectorSize Real))))
-> (Arguments (T (T Real, T (T Real))) (T Real, T (T Real))
    -> T (T Real, T (T Real)) (T (T (T VectorSize Real))))
-> T (T Real, T (T Real)) (T (T (T VectorSize Real)))
forall a b. (a -> b) -> a -> b
$ Exp Real
-> (T (T Real, T (T Real)) (T Real),
    T (T Real, T (T Real)) (T (T Real)))
-> T (T Real, T (T Real)) (T (T (T VectorSize Real)))
forall inp.
Exp Real
-> (T inp (T Real), T inp (T (T Real)))
-> T inp (T (T (T VectorSize Real)))
stereoFrequenciesFromDetuneBendModulation Exp Real
speed)


{- |
mainly for testing purposes
-}
sampledSoundMono ::
   IO (Sample.T ->
       SampleRate Real -> Real -> Real ->
       PIO.T (Zip.T MIO.GateChunk BendModControl) Chunk)
sampledSoundMono :: IO
  (T
   -> SampleRate Real
   -> Real
   -> Real
   -> T (T GateChunk (T ShortStrictTime (T Real))) Chunk)
sampledSoundMono =
   ((SampleRate Real -> (Real, Vector Real) -> T Chunk Chunk)
 -> (SampleRate Real -> T (T ShortStrictTime (T Real)) Chunk)
 -> T
 -> SampleRate Real
 -> Real
 -> Real
 -> T (T GateChunk (T ShortStrictTime (T Real))) Chunk)
-> IO (SampleRate Real -> (Real, Vector Real) -> T Chunk Chunk)
-> IO (SampleRate Real -> T (T ShortStrictTime (T Real)) Chunk)
-> IO
     (T
      -> SampleRate Real
      -> Real
      -> Real
      -> T (T GateChunk (T ShortStrictTime (T Real))) Chunk)
forall a b c. (a -> b -> c) -> IO a -> IO b -> IO c
forall (f :: * -> *) a b c.
Applicative f =>
(a -> b -> c) -> f a -> f b -> f c
liftA2
      (\SampleRate Real -> (Real, Vector Real) -> T Chunk Chunk
osc SampleRate Real -> T (T ShortStrictTime (T Real)) Chunk
freqMod T
smp SampleRate Real
sr Real
vel Real
freq ->
         let pos :: Positions
pos = T -> Positions
Sample.positions T
smp
         in  (SampleRate Real -> (Real, Vector Real) -> T Chunk Chunk)
-> T -> SampleRate Real -> Real -> T (T GateChunk Chunk) Chunk
forall a b gate.
(Transform a, Transform b) =>
(SampleRate Real -> (Real, Vector Real) -> T a b)
-> T -> SampleRate Real -> Real -> T (T (Chunk gate) a) b
assembleParts SampleRate Real -> (Real, Vector Real) -> T Chunk Chunk
osc T
smp SampleRate Real
sr Real
vel
             T (T GateChunk Chunk) Chunk
-> T (T GateChunk (T ShortStrictTime (T Real))) (T GateChunk Chunk)
-> T (T GateChunk (T ShortStrictTime (T Real))) Chunk
forall b c a. T b c -> T a b -> T a c
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
.
             T (T ShortStrictTime (T Real)) Chunk
-> T (T GateChunk (T ShortStrictTime (T Real))) (T GateChunk Chunk)
forall (arrow :: * -> * -> *) a b c.
Arrow arrow =>
arrow a b -> arrow (T c a) (T c b)
Zip.arrowSecond
                ((T Chunk Chunk
forall a. T a a
forall {k} (cat :: k -> k -> *) (a :: k). Category cat => cat a a
id :: PIOId Chunk)
                 T Chunk Chunk
-> T (T ShortStrictTime (T Real)) Chunk
-> T (T ShortStrictTime (T Real)) Chunk
forall b c a. T b c -> T a b -> T a c
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
.
                 SampleRate Real -> T (T ShortStrictTime (T Real)) Chunk
freqMod SampleRate Real
sr
                 T (T ShortStrictTime (T Real)) Chunk
-> T (T ShortStrictTime (T Real)) (T ShortStrictTime (T Real))
-> T (T ShortStrictTime (T Real)) Chunk
forall b c a. T b c -> T a b -> T a c
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
.
                 ((T ShortStrictTime (T Real) -> T ShortStrictTime (T Real))
-> T (T ShortStrictTime (T Real)) (T ShortStrictTime (T Real))
forall b c. (b -> c) -> T b c
forall (a :: * -> * -> *) b c. Arrow a => (b -> c) -> a b c
arr ((T ShortStrictTime (T Real) -> T ShortStrictTime (T Real))
 -> T (T ShortStrictTime (T Real)) (T ShortStrictTime (T Real)))
-> (T ShortStrictTime (T Real) -> T ShortStrictTime (T Real))
-> T (T ShortStrictTime (T Real)) (T ShortStrictTime (T Real))
forall a b. (a -> b) -> a -> b
$ SampleRate Real
-> Real -> T ShortStrictTime (T Real) -> T ShortStrictTime (T Real)
forall (stream :: * -> *).
Functor stream =>
SampleRate Real -> Real -> stream (T Real) -> stream (T Real)
transposeModulation SampleRate Real
sr (Real
freq Real -> Real -> Real
forall a. C a => a -> a -> a
* Positions -> Real
Sample.period Positions
pos))))
      (DSL
  (SampleRate Real -> (Real, Vector Real) -> T Chunk Chunk)
  (T (T VectorSize Real))
  (T (T VectorSize Real))
-> IO (SampleRate Real -> (Real, Vector Real) -> T Chunk Chunk)
forall f a al b bl.
(Run f, In f ~ a, Default a, Element a ~ al, Out f ~ b, Default b,
 Element b ~ bl) =>
DSL f al bl -> IO f
CausalRender.run DSL
  (SampleRate Real -> (Real, Vector Real) -> T Chunk Chunk)
  (T (T VectorSize Real))
  (T (T VectorSize Real))
SampleRate (Exp Real)
-> (Exp Real, T (T Real))
-> T (T (T VectorSize Real)) (T (T VectorSize Real))
resamplingProc)
      (DSL
  (SampleRate Real -> T (T ShortStrictTime (T Real)) Chunk)
  (Element
     (In (SampleRate Real -> T (T ShortStrictTime (T Real)) Chunk)))
  (Element
     (Out (SampleRate Real -> T (T ShortStrictTime (T Real)) Chunk)))
-> IO (SampleRate Real -> T (T ShortStrictTime (T Real)) Chunk)
forall f a al b bl.
(Run f, In f ~ a, Default a, Element a ~ al, Out f ~ b, Default b,
 Element b ~ bl) =>
DSL f al bl -> IO f
CausalRender.run (DSL
   (SampleRate Real -> T (T ShortStrictTime (T Real)) Chunk)
   (Element
      (In (SampleRate Real -> T (T ShortStrictTime (T Real)) Chunk)))
   (Element
      (Out (SampleRate Real -> T (T ShortStrictTime (T Real)) Chunk)))
 -> IO (SampleRate Real -> T (T ShortStrictTime (T Real)) Chunk))
-> DSL
     (SampleRate Real -> T (T ShortStrictTime (T Real)) Chunk)
     (Element
        (In (SampleRate Real -> T (T ShortStrictTime (T Real)) Chunk)))
     (Element
        (Out (SampleRate Real -> T (T ShortStrictTime (T Real)) Chunk)))
-> IO (SampleRate Real -> T (T ShortStrictTime (T Real)) Chunk)
forall a b. (a -> b) -> a -> b
$
       (SampleRate (Exp Real) -> Exp Real -> Exp Real)
-> Exp Real
-> (Exp Real
    -> SampleRate (Exp Real) -> T (T (T Real)) (T (T VectorSize Real)))
-> SampleRate (Exp Real)
-> T (T (T Real)) (T (T VectorSize Real))
forall a b c d.
(SampleRate a -> b -> c)
-> b -> (c -> SampleRate a -> d) -> SampleRate a -> d
constant SampleRate (Exp Real) -> Exp Real -> Exp Real
forall a. C a => SampleRate a -> a -> a
frequency Exp Real
3 ((Exp Real
  -> SampleRate (Exp Real) -> T (T (T Real)) (T (T VectorSize Real)))
 -> SampleRate (Exp Real) -> T (T (T Real)) (T (T VectorSize Real)))
-> (Exp Real
    -> SampleRate (Exp Real) -> T (T (T Real)) (T (T VectorSize Real)))
-> SampleRate (Exp Real)
-> T (T (T Real)) (T (T VectorSize Real))
forall a b. (a -> b) -> a -> b
$ \Exp Real
speed SampleRate (Exp Real)
_sr ->
         (Arguments (T (T (T Real))) (T (T Real))
 -> T (T (T Real)) (T (T VectorSize Real)))
-> T (T (T Real)) (T (T VectorSize Real))
forall inp out.
MakeArguments inp =>
(Arguments (T inp) inp -> T inp out) -> T inp out
F.withArgs ((Arguments (T (T (T Real))) (T (T Real))
  -> T (T (T Real)) (T (T VectorSize Real)))
 -> T (T (T Real)) (T (T VectorSize Real)))
-> (Arguments (T (T (T Real))) (T (T Real))
    -> T (T (T Real)) (T (T VectorSize Real)))
-> T (T (T Real)) (T (T VectorSize Real))
forall a b. (a -> b) -> a -> b
$ Exp Real
-> T (T (T Real)) (T (T Real))
-> T (T (T Real)) (T (T VectorSize Real))
forall inp.
Exp Real -> T inp (T (T Real)) -> T inp (T (T VectorSize Real))
frequencyFromBendModulationPacked Exp Real
speed)

{-
We split the frequency modulation signal
in order to get a smooth frequency modulation curve.
Without (periodic) frequency modulation
we could just split the piecewise constant control curve @fm@.
-}
assembleParts ::
   (CutG.Transform a, CutG.Transform b) =>
   (SampleRate Real -> (Real, SVL.Vector Real) -> PIO.T a b) ->
   Sample.T -> SampleRate Real -> Real ->
   PIO.T (Zip.T (Gate.Chunk gate) a) b
assembleParts :: forall a b gate.
(Transform a, Transform b) =>
(SampleRate Real -> (Real, Vector Real) -> T a b)
-> T -> SampleRate Real -> Real -> T (T (Chunk gate) a) b
assembleParts SampleRate Real -> (Real, Vector Real) -> T a b
osc T
smp SampleRate Real
sr Real
vel =
   let pos :: Positions
pos = T -> Positions
Sample.positions T
smp
       amp :: Real
amp = Real
2 Real -> Real -> Real
forall a. C a => a -> a -> a
* Real -> Real
forall a. C a => a -> a
amplitudeFromVelocity Real
vel
       (Vector Real
attack, Vector Real
sustain, Vector Real
release) = T -> (Vector Real, Vector Real, Vector Real)
Sample.parts T
smp
       osci :: Vector Real -> T a b
osci Vector Real
smpBody = SampleRate Real -> (Real, Vector Real) -> T a b
osc SampleRate Real
sr (Real
amp, Vector Real
smpBody)
   in  T (T (Chunk gate) a) b
-> T (T (Chunk gate) a) b -> T (T (Chunk gate) a) b
forall a. Monoid a => a -> a -> a
mappend
          (Vector Real -> T a b
osci
             (Vector Real
attack Vector Real -> Vector Real -> Vector Real
forall a. Storable a => Vector a -> Vector a -> Vector a
`SigSt.append`
              Vector Real -> Vector Real
forall a. Storable a => Vector a -> Vector a
SVL.cycle (Int -> Vector Real -> Vector Real
forall a. Storable a => Int -> Vector a -> Vector a
SigSt.take (Positions -> Int
Sample.loopLength Positions
pos) Vector Real
sustain))
           T a b -> T (T (Chunk gate) a) a -> T (T (Chunk gate) a) b
forall b c a. T b c -> T a b -> T a c
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
.
           T (T (Chunk gate) a) a
forall signal a. Transform signal => T (T (Chunk a) signal) signal
Gate.shorten)
          (Vector Real -> T a b
osci Vector Real
release T a b -> (T (Chunk gate) a -> a) -> T (T (Chunk gate) a) b
forall (a :: * -> * -> *) c d b.
Arrow a =>
a c d -> (b -> c) -> a b d
<<^ T (Chunk gate) a -> a
forall a b. T a b -> b
Zip.second)

resamplingProc ::
   SampleRate (Exp Real) ->
   (Exp Real, Sig.T (MultiValue.T Real)) ->
   Causal.T VectorValue VectorValue
resamplingProc :: SampleRate (Exp Real)
-> (Exp Real, T (T Real))
-> T (T (T VectorSize Real)) (T (T VectorSize Real))
resamplingProc SampleRate (Exp Real)
_sr (Exp Real
amp, T (T Real)
smp) =
       Exp Real -> T (T (T VectorSize Real)) (T (T VectorSize Real))
forall n a.
(Positive n, PseudoRing a) =>
Exp a -> T (Serial n a) (Serial n a)
CausalPS.amplify Exp Real
amp
       T (T (T VectorSize Real)) (T (T VectorSize Real))
-> T (T (T VectorSize Real)) (T (T VectorSize Real))
-> T (T (T VectorSize Real)) (T (T VectorSize Real))
forall b c a. T b c -> T a b -> T a c
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
.
       T (T Real) (T Real)
-> T (T (T VectorSize Real)) (T (T VectorSize Real))
forall va n a vb b.
(Read va, n ~ Size va, a ~ Element va, Write vb, n ~ Size vb,
 b ~ Element vb) =>
T a b -> T va vb
CausalPS.pack
          (T (T Real) -> T (T Real) (T Real)
forall a.
(PseudoRing a, IntegerConstant a, Comparison a, C a) =>
MV a -> MV a a
Causal.frequencyModulationLinear
             {-
             (Sig.fromStorableVector $
                fmap (SV.concat . SVL.chunks . SVL.take 1000000) smp)
             -}
             T (T Real)
smp
             {- (Sig.osci WaveL.saw 0 (1 / 324 {- samplePeriod smp -})) -})

helixSound ::
   IO (Sample.T ->
       SampleRate Real -> Real -> Real ->
       PIO.T
          (Zip.T MIO.GateChunk
              (Zip.T (Control Real) DetuneBendModControl))
          StereoChunk)
helixSound :: IO
  (T
   -> SampleRate Real
   -> Real
   -> Real
   -> T (T GateChunk (T (Control Real) DetuneBendModControl))
        StereoChunk)
helixSound =
   ((SampleRate Real
  -> Real
  -> Real
  -> Buffer Real
  -> T (T Chunk StereoChunk) StereoChunk)
 -> (SampleRate Real
     -> (Real, Real, Real) -> T (Control Real) Chunk)
 -> (SampleRate Real -> (Real, Real) -> T (Control Real) Chunk)
 -> (SampleRate Real -> T DetuneBendModControl StereoChunk)
 -> T
 -> SampleRate Real
 -> Real
 -> Real
 -> T (T GateChunk (T (Control Real) DetuneBendModControl))
      StereoChunk)
-> IO
     (SampleRate Real
      -> Real
      -> Real
      -> Buffer Real
      -> T (T Chunk StereoChunk) StereoChunk)
-> IO
     (SampleRate Real -> (Real, Real, Real) -> T (Control Real) Chunk)
-> IO (SampleRate Real -> (Real, Real) -> T (Control Real) Chunk)
-> IO (SampleRate Real -> T DetuneBendModControl StereoChunk)
-> IO
     (T
      -> SampleRate Real
      -> Real
      -> Real
      -> T (T GateChunk (T (Control Real) DetuneBendModControl))
           StereoChunk)
forall (m :: * -> *) a b c d r.
Applicative m =>
(a -> b -> c -> d -> r) -> m a -> m b -> m c -> m d -> m r
App.lift4
      (\SampleRate Real
-> Real
-> Real
-> Buffer Real
-> T (T Chunk StereoChunk) StereoChunk
helix SampleRate Real -> (Real, Real, Real) -> T (Control Real) Chunk
zigZag SampleRate Real -> (Real, Real) -> T (Control Real) Chunk
integrate SampleRate Real -> T DetuneBendModControl StereoChunk
freqMod T
smp SampleRate Real
sr Real
vel Real
freq ->
         let pos :: Positions
pos = T -> Positions
Sample.positions T
smp
             amp :: Real
amp = Real
2 Real -> Real -> Real
forall a. C a => a -> a -> a
* Real -> Real
forall a. C a => a -> a
amplitudeFromVelocity Real
vel
             rateFactor :: Real
rateFactor =
                Frequency -> Frequency -> Real
forall u a. (C u, C a) => T u a -> T u a -> a
DN.divToScalar
                   (T -> Frequency
Sample.sampleRate T
smp)
                   (SampleRate Real -> Frequency
forall a. SampleRate a -> Frequency a
frequencyFromSampleRate SampleRate Real
sr)
             releaseStart :: Real
releaseStart =
                Int -> Real
forall a b. (C a, C b) => a -> b
fromIntegral (Int -> Real) -> Int -> Real
forall a b. (a -> b) -> a -> b
$
                Positions -> Int
Sample.loopStart Positions
pos Int -> Int -> Int
forall a. C a => a -> a -> a
+ Positions -> Int
Sample.loopLength Positions
pos
             releaseStop :: Real
releaseStop =
                Int -> Real
forall a b. (C a, C b) => a -> b
fromIntegral (Int -> Real) -> Int -> Real
forall a b. (a -> b) -> a -> b
$
                Positions -> Int
Sample.start Positions
pos Int -> Int -> Int
forall a. C a => a -> a -> a
+ Positions -> Int
Sample.length Positions
pos
             poss :: (Real, Real, Real)
poss =
                (Int -> Real
forall a b. (C a, C b) => a -> b
fromIntegral (Int -> Real) -> Int -> Real
forall a b. (a -> b) -> a -> b
$ Positions -> Int
Sample.start Positions
pos,
                 Int -> Real
forall a b. (C a, C b) => a -> b
fromIntegral (Int -> Real) -> Int -> Real
forall a b. (a -> b) -> a -> b
$ Positions -> Int
Sample.loopStart Positions
pos,
                 Int -> Real
forall a b. (C a, C b) => a -> b
fromIntegral (Int -> Real) -> Int -> Real
forall a b. (a -> b) -> a -> b
$ Positions -> Int
Sample.loopLength Positions
pos)
         in  SampleRate Real
-> Real
-> Real
-> Buffer Real
-> T (T Chunk StereoChunk) StereoChunk
helix SampleRate Real
sr Real
amp (Positions -> Real
Sample.period Positions
pos)
                (Vector Real -> Buffer Real
forall a. Vector a -> Buffer a
Render.buffer (Vector Real -> Buffer Real) -> Vector Real -> Buffer Real
forall a b. (a -> b) -> a -> b
$ [Vector Real] -> Vector Real
forall a. Storable a => [Vector a] -> Vector a
SV.concat ([Vector Real] -> Vector Real) -> [Vector Real] -> Vector Real
forall a b. (a -> b) -> a -> b
$ Vector Real -> [Vector Real]
forall a. Vector a -> [Vector a]
SVL.chunks (Vector Real -> [Vector Real]) -> Vector Real -> [Vector Real]
forall a b. (a -> b) -> a -> b
$ T -> Vector Real
Sample.body T
smp)
             T (T Chunk StereoChunk) StereoChunk
-> T (T GateChunk (T (Control Real) DetuneBendModControl))
     (T Chunk StereoChunk)
-> T (T GateChunk (T (Control Real) DetuneBendModControl))
     StereoChunk
forall b c a. T b c -> T a b -> T a c
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
.
             T (T GateChunk (Control Real)) Chunk
-> T (T (T GateChunk (Control Real)) StereoChunk)
     (T Chunk StereoChunk)
forall (arrow :: * -> * -> *) b c a.
(Arrow arrow, Transform b, Transform c) =>
arrow a b -> arrow (T a c) (T b c)
Zip.arrowFirstShorten
                (T (T GateChunk (Control Real)) Chunk
-> T (T GateChunk (Control Real)) Chunk
-> T (T GateChunk (Control Real)) Chunk
forall a. Monoid a => a -> a -> a
mappend
                    (SampleRate Real -> (Real, Real, Real) -> T (Control Real) Chunk
zigZag SampleRate Real
sr (Real, Real, Real)
poss T (Control Real) Chunk
-> T (T GateChunk (Control Real)) (Control Real)
-> T (T GateChunk (Control Real)) Chunk
forall b c a. T b c -> T a b -> T a c
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. T (T GateChunk (Control Real)) (Control Real)
forall signal a. Transform signal => T (T (Chunk a) signal) signal
Gate.shorten)
                    (SampleRate Real -> (Real, Real) -> T (Control Real) Chunk
integrate SampleRate Real
sr (Real
releaseStart, Real
releaseStop)
                        T (Control Real) Chunk
-> (T GateChunk (Control Real) -> Control Real)
-> T (T GateChunk (Control Real)) Chunk
forall (a :: * -> * -> *) c d b.
Arrow a =>
a c d -> (b -> c) -> a b d
<<^ T GateChunk (Control Real) -> Control Real
forall a b. T a b -> b
Zip.second))
             T (T (T GateChunk (Control Real)) StereoChunk)
  (T Chunk StereoChunk)
-> T (T GateChunk (T (Control Real) DetuneBendModControl))
     (T (T GateChunk (Control Real)) StereoChunk)
-> T (T GateChunk (T (Control Real) DetuneBendModControl))
     (T Chunk StereoChunk)
forall b c a. T b c -> T a b -> T a c
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
.
             T DetuneBendModControl StereoChunk
-> T (T (T GateChunk (Control Real)) DetuneBendModControl)
     (T (T GateChunk (Control Real)) StereoChunk)
forall (arrow :: * -> * -> *) a b c.
Arrow arrow =>
arrow a b -> arrow (T c a) (T c b)
Zip.arrowSecond
                (SampleRate Real -> T DetuneBendModControl StereoChunk
freqMod SampleRate Real
sr
                 T DetuneBendModControl StereoChunk
-> T DetuneBendModControl DetuneBendModControl
-> T DetuneBendModControl StereoChunk
forall b c a. T b c -> T a b -> T a c
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
.
                 (T (T ShortStrictTime (T Real)) (T ShortStrictTime (T Real))
-> T DetuneBendModControl DetuneBendModControl
forall (arrow :: * -> * -> *) a b c.
Arrow arrow =>
arrow a b -> arrow (T c a) (T c b)
Zip.arrowSecond (T (T ShortStrictTime (T Real)) (T ShortStrictTime (T Real))
 -> T DetuneBendModControl DetuneBendModControl)
-> T (T ShortStrictTime (T Real)) (T ShortStrictTime (T Real))
-> T DetuneBendModControl DetuneBendModControl
forall a b. (a -> b) -> a -> b
$ (T ShortStrictTime (T Real) -> T ShortStrictTime (T Real))
-> T (T ShortStrictTime (T Real)) (T ShortStrictTime (T Real))
forall b c. (b -> c) -> T b c
forall (a :: * -> * -> *) b c. Arrow a => (b -> c) -> a b c
arr ((T ShortStrictTime (T Real) -> T ShortStrictTime (T Real))
 -> T (T ShortStrictTime (T Real)) (T ShortStrictTime (T Real)))
-> (T ShortStrictTime (T Real) -> T ShortStrictTime (T Real))
-> T (T ShortStrictTime (T Real)) (T ShortStrictTime (T Real))
forall a b. (a -> b) -> a -> b
$ SampleRate Real
-> Real -> T ShortStrictTime (T Real) -> T ShortStrictTime (T Real)
forall (stream :: * -> *).
Functor stream =>
SampleRate Real -> Real -> stream (T Real) -> stream (T Real)
transposeModulation SampleRate Real
sr Real
freq))
             T (T (T GateChunk (Control Real)) DetuneBendModControl)
  (T (T GateChunk (Control Real)) StereoChunk)
-> T (T GateChunk (T (Control Real) DetuneBendModControl))
     (T (T GateChunk (Control Real)) DetuneBendModControl)
-> T (T GateChunk (T (Control Real) DetuneBendModControl))
     (T (T GateChunk (Control Real)) StereoChunk)
forall b c a. T b c -> T a b -> T a c
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
.
             (T GateChunk (T (Control Real) DetuneBendModControl)
 -> T (T GateChunk (Control Real)) DetuneBendModControl)
-> T (T GateChunk (T (Control Real) DetuneBendModControl))
     (T (T GateChunk (Control Real)) DetuneBendModControl)
forall b c. (b -> c) -> T b c
forall (a :: * -> * -> *) b c. Arrow a => (b -> c) -> a b c
arr (\(Zip.Cons GateChunk
gate (Zip.Cons Control Real
speed DetuneBendModControl
fm)) ->
                       T GateChunk (Control Real)
-> DetuneBendModControl
-> T (T GateChunk (Control Real)) DetuneBendModControl
forall a b. a -> b -> T a b
Zip.Cons (GateChunk -> Control Real -> T GateChunk (Control Real)
forall a b. a -> b -> T a b
Zip.Cons GateChunk
gate ((Real -> Real) -> Control Real -> Control Real
forall a b. (a -> b) -> T ShortStrictTime a -> T ShortStrictTime b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (Real
rateFactorReal -> Real -> Real
forall a. C a => a -> a -> a
*) Control Real
speed)) DetuneBendModControl
fm))
      IO
  (SampleRate Real
   -> Real
   -> Real
   -> Buffer Real
   -> T (T Chunk StereoChunk) StereoChunk)
makeHelix
      IO
  (SampleRate Real -> (Real, Real, Real) -> T (Control Real) Chunk)
makeZigZag
      IO (SampleRate Real -> (Real, Real) -> T (Control Real) Chunk)
makeIntegrate
      (DSL
  (SampleRate Real -> T DetuneBendModControl StereoChunk)
  (Element
     (In (SampleRate Real -> T DetuneBendModControl StereoChunk)))
  (Element
     (Out (SampleRate Real -> T DetuneBendModControl StereoChunk)))
-> IO (SampleRate Real -> T DetuneBendModControl StereoChunk)
forall f a al b bl.
(Run f, In f ~ a, Default a, Element a ~ al, Out f ~ b, Default b,
 Element b ~ bl) =>
DSL f al bl -> IO f
CausalRender.run (DSL
   (SampleRate Real -> T DetuneBendModControl StereoChunk)
   (Element
      (In (SampleRate Real -> T DetuneBendModControl StereoChunk)))
   (Element
      (Out (SampleRate Real -> T DetuneBendModControl StereoChunk)))
 -> IO (SampleRate Real -> T DetuneBendModControl StereoChunk))
-> DSL
     (SampleRate Real -> T DetuneBendModControl StereoChunk)
     (Element
        (In (SampleRate Real -> T DetuneBendModControl StereoChunk)))
     (Element
        (Out (SampleRate Real -> T DetuneBendModControl StereoChunk)))
-> IO (SampleRate Real -> T DetuneBendModControl StereoChunk)
forall a b. (a -> b) -> a -> b
$
       (SampleRate (Exp Real) -> Exp Real -> Exp Real)
-> Exp Real
-> (Exp Real
    -> SampleRate (Exp Real)
    -> T (T Real, T (T Real)) (T (T (T VectorSize Real))))
-> SampleRate (Exp Real)
-> T (T Real, T (T Real)) (T (T (T VectorSize Real)))
forall a b c d.
(SampleRate a -> b -> c)
-> b -> (c -> SampleRate a -> d) -> SampleRate a -> d
constant SampleRate (Exp Real) -> Exp Real -> Exp Real
forall a. C a => SampleRate a -> a -> a
frequency Exp Real
3 ((Exp Real
  -> SampleRate (Exp Real)
  -> T (T Real, T (T Real)) (T (T (T VectorSize Real))))
 -> SampleRate (Exp Real)
 -> T (T Real, T (T Real)) (T (T (T VectorSize Real))))
-> (Exp Real
    -> SampleRate (Exp Real)
    -> T (T Real, T (T Real)) (T (T (T VectorSize Real))))
-> SampleRate (Exp Real)
-> T (T Real, T (T Real)) (T (T (T VectorSize Real)))
forall a b. (a -> b) -> a -> b
$ \Exp Real
speed SampleRate (Exp Real)
_sr ->
         (T (T (T VectorSize Real)) -> T (T (T VectorSize Real)))
-> T (T Real, T (T Real)) (T (T (T VectorSize Real)))
-> T (T Real, T (T Real)) (T (T (T VectorSize Real)))
forall a b.
(a -> b) -> T (T Real, T (T Real)) a -> T (T Real, T (T Real)) b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap T (T (T VectorSize Real)) -> T (T (T VectorSize Real))
forall a. T (T a) -> T (T a)
Stereo.multiValue (T (T Real, T (T Real)) (T (T (T VectorSize Real)))
 -> T (T Real, T (T Real)) (T (T (T VectorSize Real))))
-> T (T Real, T (T Real)) (T (T (T VectorSize Real)))
-> T (T Real, T (T Real)) (T (T (T VectorSize Real)))
forall a b. (a -> b) -> a -> b
$
         (Arguments (T (T Real, T (T Real))) (T Real, T (T Real))
 -> T (T Real, T (T Real)) (T (T (T VectorSize Real))))
-> T (T Real, T (T Real)) (T (T (T VectorSize Real)))
forall inp out.
MakeArguments inp =>
(Arguments (T inp) inp -> T inp out) -> T inp out
F.withArgs ((Arguments (T (T Real, T (T Real))) (T Real, T (T Real))
  -> T (T Real, T (T Real)) (T (T (T VectorSize Real))))
 -> T (T Real, T (T Real)) (T (T (T VectorSize Real))))
-> (Arguments (T (T Real, T (T Real))) (T Real, T (T Real))
    -> T (T Real, T (T Real)) (T (T (T VectorSize Real))))
-> T (T Real, T (T Real)) (T (T (T VectorSize Real)))
forall a b. (a -> b) -> a -> b
$ Exp Real
-> (T (T Real, T (T Real)) (T Real),
    T (T Real, T (T Real)) (T (T Real)))
-> T (T Real, T (T Real)) (T (T (T VectorSize Real)))
forall inp.
Exp Real
-> (T inp (T Real), T inp (T (T Real)))
-> T inp (T (T (T VectorSize Real)))
stereoFrequenciesFromDetuneBendModulation Exp Real
speed)

makeHelix ::
   IO (SampleRate Real -> Real -> Real -> Render.Buffer Real ->
       PIO.T (Zip.T Chunk StereoChunk) StereoChunk)
makeHelix :: IO
  (SampleRate Real
   -> Real
   -> Real
   -> Buffer Real
   -> T (T Chunk StereoChunk) StereoChunk)
makeHelix =
   DSL
  (SampleRate Real
   -> Real
   -> Real
   -> Buffer Real
   -> T (T Chunk StereoChunk) StereoChunk)
  (T (T VectorSize Real), T (T (T VectorSize Real)))
  (T (T (T VectorSize Real)))
-> IO
     (SampleRate Real
      -> Real
      -> Real
      -> Buffer Real
      -> T (T Chunk StereoChunk) StereoChunk)
forall f a al b bl.
(Run f, In f ~ a, Default a, Element a ~ al, Out f ~ b, Default b,
 Element b ~ bl) =>
DSL f al bl -> IO f
CausalRender.run (DSL
   (SampleRate Real
    -> Real
    -> Real
    -> Buffer Real
    -> T (T Chunk StereoChunk) StereoChunk)
   (T (T VectorSize Real), T (T (T VectorSize Real)))
   (T (T (T VectorSize Real)))
 -> IO
      (SampleRate Real
       -> Real
       -> Real
       -> Buffer Real
       -> T (T Chunk StereoChunk) StereoChunk))
-> DSL
     (SampleRate Real
      -> Real
      -> Real
      -> Buffer Real
      -> T (T Chunk StereoChunk) StereoChunk)
     (T (T VectorSize Real), T (T (T VectorSize Real)))
     (T (T (T VectorSize Real)))
-> IO
     (SampleRate Real
      -> Real
      -> Real
      -> Buffer Real
      -> T (T Chunk StereoChunk) StereoChunk)
forall a b. (a -> b) -> a -> b
$
   (Arg Number (Exp Real)
 -> Arg Number (Exp Real)
 -> SampleRate (Exp Real)
 -> Exp (StorableVector Real)
 -> T (T (T VectorSize Real), T (T (T VectorSize Real)))
      (T (T (T VectorSize Real))))
-> SampleRate (Exp Real)
-> Unwrapped
     (Arg Number (Exp Real)
      -> Arg Number (Exp Real)
      -> SampleRate (Exp Real)
      -> Exp (StorableVector Real)
      -> T (T (T VectorSize Real), T (T (T VectorSize Real)))
           (T (T (T VectorSize Real))))
forall a f. Wrapped a f => f -> SampleRate a -> Unwrapped f
wrapped ((Arg Number (Exp Real)
  -> Arg Number (Exp Real)
  -> SampleRate (Exp Real)
  -> Exp (StorableVector Real)
  -> T (T (T VectorSize Real), T (T (T VectorSize Real)))
       (T (T (T VectorSize Real))))
 -> SampleRate (Exp Real)
 -> Unwrapped
      (Arg Number (Exp Real)
       -> Arg Number (Exp Real)
       -> SampleRate (Exp Real)
       -> Exp (StorableVector Real)
       -> T (T (T VectorSize Real), T (T (T VectorSize Real)))
            (T (T (T VectorSize Real)))))
-> (Arg Number (Exp Real)
    -> Arg Number (Exp Real)
    -> SampleRate (Exp Real)
    -> Exp (StorableVector Real)
    -> T (T (T VectorSize Real), T (T (T VectorSize Real)))
         (T (T (T VectorSize Real))))
-> SampleRate (Exp Real)
-> Unwrapped
     (Arg Number (Exp Real)
      -> Arg Number (Exp Real)
      -> SampleRate (Exp Real)
      -> Exp (StorableVector Real)
      -> T (T (T VectorSize Real), T (T (T VectorSize Real)))
           (T (T (T VectorSize Real))))
forall a b. (a -> b) -> a -> b
$
      \(Number Exp Real
amp) (Number Exp Real
per) (SampleRate Exp Real
_sr) Exp (StorableVector Real)
smp ->
           (T (T (T VectorSize Real)) -> T (T (T VectorSize Real)))
-> T (T (T (T VectorSize Real))) (T (T (T VectorSize Real)))
forall b c. (b -> c) -> T b c
forall (a :: * -> * -> *) b c. Arrow a => (b -> c) -> a b c
arr T (T (T VectorSize Real)) -> T (T (T VectorSize Real))
forall a. T (T a) -> T (T a)
Stereo.multiValue
           T (T (T (T VectorSize Real))) (T (T (T VectorSize Real)))
-> T (T (T VectorSize Real), T (T (T VectorSize Real)))
     (T (T (T VectorSize Real)))
-> T (T (T VectorSize Real), T (T (T VectorSize Real)))
     (T (T (T VectorSize Real)))
forall b c a. T b c -> T a b -> T a c
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
.
           Exp Real
-> T (T (T (T VectorSize Real))) (T (T (T VectorSize Real)))
forall n a.
(Positive n, PseudoRing a) =>
Exp a -> T (T (Serial n a)) (T (Serial n a))
CausalPS.amplifyStereo Exp Real
amp
           T (T (T (T VectorSize Real))) (T (T (T VectorSize Real)))
-> T (T (T VectorSize Real), T (T (T VectorSize Real)))
     (T (T (T VectorSize Real)))
-> T (T (T VectorSize Real), T (T (T VectorSize Real)))
     (T (T (T VectorSize Real)))
forall b c a. T b c -> T a b -> T a c
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
.
           T (T (T VectorSize Real), T (T VectorSize Real))
  (T (T VectorSize Real))
-> T (T (T (T VectorSize Real), T (T VectorSize Real)))
     (T (T (T VectorSize Real)))
forall a b.
(Phi a, Undefined a, Phi b, Undefined b) =>
T a b -> T (T a) (T b)
Causal.stereoFromMono
              ((forall r.
 T r Nodes02 (T (T VectorSize Real)) (T (T VectorSize Real)))
-> (forall r.
    T r Nodes02 (T (T VectorSize Real)) (T (T VectorSize Real)))
-> Exp Int
-> Exp Real
-> Exp (StorableVector Real)
-> T (T (T VectorSize Real), T (T VectorSize Real))
     (T (T VectorSize Real))
forall (nodesStep :: * -> *) (nodesLeap :: * -> *) vh ve v n a ar.
(C nodesStep, C nodesLeap, C vh, T vh ~ ve, Element v ~ ve,
 Size (nodesLeap (nodesStep v)) ~ n,
 Write (nodesLeap (nodesStep v)),
 Element (nodesLeap (nodesStep v))
 ~ nodesLeap (nodesStep (Element v)),
 Positive n, C a, Field a, Real a, Fraction a, RationalConstant a,
 NativeFloating n a ar) =>
(forall r. T r nodesLeap (Value n a) v)
-> (forall r. T r nodesStep (Value n a) v)
-> Exp Int
-> Exp a
-> Exp (StorableVector vh)
-> T (Value n a, Value n a) v
Helix.staticPacked
                  T r Nodes02 (T (T VectorSize Real)) (T (T VectorSize Real))
forall r.
T r Nodes02 (T (T VectorSize Real)) (T (T VectorSize Real))
forall a r. (PseudoRing a, IntegerConstant a) => T r Nodes02 a a
Interpolation.linear
                  T r Nodes02 (T (T VectorSize Real)) (T (T VectorSize Real))
forall r.
T r Nodes02 (T (T VectorSize Real)) (T (T VectorSize Real))
forall a r. (PseudoRing a, IntegerConstant a) => T r Nodes02 a a
Interpolation.linear
                  (Exp Real -> Exp Int
forall i ir a ar.
(NativeInteger i ir, NativeFloating a ar) =>
Exp a -> Exp i
Expr.roundToIntFast Exp Real
per) Exp Real
per
                  Exp (StorableVector Real)
smp
               T (T (T VectorSize Real), T (T VectorSize Real))
  (T (T VectorSize Real))
-> T (T (T VectorSize Real), T (T VectorSize Real))
     (T (T VectorSize Real), T (T VectorSize Real))
-> T (T (T VectorSize Real), T (T VectorSize Real))
     (T (T VectorSize Real))
forall b c a. T b c -> T a b -> T a c
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
.
               T (T (T VectorSize Real)) (T (T VectorSize Real))
-> T (T (T VectorSize Real), T (T VectorSize Real))
     (T (T VectorSize Real), T (T VectorSize Real))
forall b c d. T b c -> T (d, b) (d, c)
forall (a :: * -> * -> *) b c d.
Arrow a =>
a b c -> a (d, b) (d, c)
second (T (T (T VectorSize Real), T (T VectorSize Real))
  (T (T VectorSize Real))
forall n t.
(Positive n, C t, Fraction t) =>
T (Serial n t, Serial n t) (Serial n t)
CausalPS.osciCore T (T (T VectorSize Real), T (T VectorSize Real))
  (T (T VectorSize Real))
-> SignalOf T (T (T VectorSize Real))
-> T (T (T VectorSize Real)) (T (T VectorSize Real))
forall (process :: * -> * -> *) a b c.
C process =>
process (a, b) c -> SignalOf process a -> process b c
$< SignalOf T (T (T VectorSize Real))
T (T (T VectorSize Real))
0))
           T (T (T (T VectorSize Real), T (T VectorSize Real)))
  (T (T (T VectorSize Real)))
-> T (T (T VectorSize Real), T (T (T VectorSize Real)))
     (T (T (T VectorSize Real), T (T VectorSize Real)))
-> T (T (T VectorSize Real), T (T (T VectorSize Real)))
     (T (T (T VectorSize Real)))
forall b c a. T b c -> T a b -> T a c
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
.
           ((T (T VectorSize Real), T (T (T VectorSize Real)))
 -> T (T (T VectorSize Real), T (T VectorSize Real)))
-> T (T (T VectorSize Real), T (T (T VectorSize Real)))
     (T (T (T VectorSize Real), T (T VectorSize Real)))
forall b c. (b -> c) -> T b c
forall (a :: * -> * -> *) b c. Arrow a => (b -> c) -> a b c
arr (\(T (T VectorSize Real)
shape, T (T (T VectorSize Real))
freq) -> (,) T (T VectorSize Real)
shape (T (T VectorSize Real)
 -> (T (T VectorSize Real), T (T VectorSize Real)))
-> T (T (T VectorSize Real))
-> T (T (T VectorSize Real), T (T VectorSize Real))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> T (T (T VectorSize Real)) -> T (T (T VectorSize Real))
forall a. T (T a) -> T (T a)
Stereo.unMultiValue T (T (T VectorSize Real))
freq)

makeZigZag ::
   IO (SampleRate Real -> (Real, Real, Real) ->
       PIO.T (Control Real) Chunk)
makeZigZag :: IO
  (SampleRate Real -> (Real, Real, Real) -> T (Control Real) Chunk)
makeZigZag =
   DSL
  (SampleRate Real -> (Real, Real, Real) -> T (Control Real) Chunk)
  (T Real)
  (T (T VectorSize Real))
-> IO
     (SampleRate Real -> (Real, Real, Real) -> T (Control Real) Chunk)
forall f a al b bl.
(Run f, In f ~ a, Default a, Element a ~ al, Out f ~ b, Default b,
 Element b ~ bl) =>
DSL f al bl -> IO f
CausalRender.run (DSL
   (SampleRate Real -> (Real, Real, Real) -> T (Control Real) Chunk)
   (T Real)
   (T (T VectorSize Real))
 -> IO
      (SampleRate Real -> (Real, Real, Real) -> T (Control Real) Chunk))
-> DSL
     (SampleRate Real -> (Real, Real, Real) -> T (Control Real) Chunk)
     (T Real)
     (T (T VectorSize Real))
-> IO
     (SampleRate Real -> (Real, Real, Real) -> T (Control Real) Chunk)
forall a b. (a -> b) -> a -> b
$
   ((Arg Number (Exp Real), Arg Number (Exp Real),
  Arg Number (Exp Real))
 -> SampleRate (Exp Real) -> T (T Real) (T (T VectorSize Real)))
-> SampleRate (Exp Real)
-> Unwrapped
     ((Arg Number (Exp Real), Arg Number (Exp Real),
       Arg Number (Exp Real))
      -> SampleRate (Exp Real) -> T (T Real) (T (T VectorSize Real)))
forall a f. Wrapped a f => f -> SampleRate a -> Unwrapped f
wrapped (((Arg Number (Exp Real), Arg Number (Exp Real),
   Arg Number (Exp Real))
  -> SampleRate (Exp Real) -> T (T Real) (T (T VectorSize Real)))
 -> SampleRate (Exp Real)
 -> Unwrapped
      ((Arg Number (Exp Real), Arg Number (Exp Real),
        Arg Number (Exp Real))
       -> SampleRate (Exp Real) -> T (T Real) (T (T VectorSize Real))))
-> ((Arg Number (Exp Real), Arg Number (Exp Real),
     Arg Number (Exp Real))
    -> SampleRate (Exp Real) -> T (T Real) (T (T VectorSize Real)))
-> SampleRate (Exp Real)
-> Unwrapped
     ((Arg Number (Exp Real), Arg Number (Exp Real),
       Arg Number (Exp Real))
      -> SampleRate (Exp Real) -> T (T Real) (T (T VectorSize Real)))
forall a b. (a -> b) -> a -> b
$
      \(Number Exp Real
start, Number Exp Real
loopStart, Number Exp Real
loopLength) (SampleRate Exp Real
_sr) ->
         Exp Real -> T (T (T VectorSize Real)) (T (T VectorSize Real))
forall n a.
(Positive n, Additive a) =>
Exp a -> T (Serial n a) (Serial n a)
CausalPS.raise Exp Real
start
         T (T (T VectorSize Real)) (T (T VectorSize Real))
-> T (T Real) (T (T VectorSize Real))
-> T (T Real) (T (T VectorSize Real))
forall b c a. T b c -> T a b -> T a c
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
.
         -- CausalPS.pack (Helix.zigZagLong (loopStart-start) loopLength)
         Exp Real
-> Exp Real -> T (T (T VectorSize Real)) (T (T VectorSize Real))
forall n a.
(Vector n a, Field a, Fraction a, RationalConstant a, Select a,
 Comparison a) =>
Exp a -> Exp a -> T (Value n a) (Value n a)
Helix.zigZagLongPacked (Exp Real
loopStartExp Real -> Exp Real -> Exp Real
forall a. C a => a -> a -> a
-Exp Real
start) Exp Real
loopLength
         T (T (T VectorSize Real)) (T (T VectorSize Real))
-> T (T Real) (T (T VectorSize Real))
-> T (T Real) (T (T VectorSize Real))
forall b c a. T b c -> T a b -> T a c
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
.
         (Exp Real -> Exp (T VectorSize Real))
-> T (T Real) (T (T VectorSize Real))
forall ae a be b.
(Aggregate ae a, Aggregate be b) =>
(ae -> be) -> T a b
Causal.map Exp Real -> Exp (T VectorSize Real)
forall n a. (Positive n, C a) => Exp a -> Exp (T n a)
Serial.upsample

makeIntegrate ::
   IO (SampleRate Real -> (Real, Real) ->
       PIO.T (Control Real) Chunk)
makeIntegrate :: IO (SampleRate Real -> (Real, Real) -> T (Control Real) Chunk)
makeIntegrate =
   DSL
  (SampleRate Real -> (Real, Real) -> T (Control Real) Chunk)
  (T Real)
  (T (T VectorSize Real))
-> IO (SampleRate Real -> (Real, Real) -> T (Control Real) Chunk)
forall f a al b bl.
(Run f, In f ~ a, Default a, Element a ~ al, Out f ~ b, Default b,
 Element b ~ bl) =>
DSL f al bl -> IO f
CausalRender.run (DSL
   (SampleRate Real -> (Real, Real) -> T (Control Real) Chunk)
   (T Real)
   (T (T VectorSize Real))
 -> IO (SampleRate Real -> (Real, Real) -> T (Control Real) Chunk))
-> DSL
     (SampleRate Real -> (Real, Real) -> T (Control Real) Chunk)
     (T Real)
     (T (T VectorSize Real))
-> IO (SampleRate Real -> (Real, Real) -> T (Control Real) Chunk)
forall a b. (a -> b) -> a -> b
$
   ((Arg Number (Exp Real), Arg Number (Exp Real))
 -> SampleRate (Exp Real) -> T (T Real) (T (T VectorSize Real)))
-> SampleRate (Exp Real)
-> Unwrapped
     ((Arg Number (Exp Real), Arg Number (Exp Real))
      -> SampleRate (Exp Real) -> T (T Real) (T (T VectorSize Real)))
forall a f. Wrapped a f => f -> SampleRate a -> Unwrapped f
wrapped (((Arg Number (Exp Real), Arg Number (Exp Real))
  -> SampleRate (Exp Real) -> T (T Real) (T (T VectorSize Real)))
 -> SampleRate (Exp Real)
 -> Unwrapped
      ((Arg Number (Exp Real), Arg Number (Exp Real))
       -> SampleRate (Exp Real) -> T (T Real) (T (T VectorSize Real))))
-> ((Arg Number (Exp Real), Arg Number (Exp Real))
    -> SampleRate (Exp Real) -> T (T Real) (T (T VectorSize Real)))
-> SampleRate (Exp Real)
-> Unwrapped
     ((Arg Number (Exp Real), Arg Number (Exp Real))
      -> SampleRate (Exp Real) -> T (T Real) (T (T VectorSize Real)))
forall a b. (a -> b) -> a -> b
$
      \(Number Exp Real
start, Number Exp Real
stop) (SampleRate Exp Real
_sr) ->
         (Exp (T VectorSize Real) -> Exp Bool)
-> T (T (T VectorSize Real)) (T (T VectorSize Real))
forall ae a. Aggregate ae a => (ae -> Exp Bool) -> T a a
Causal.takeWhile (\Exp (T VectorSize Real)
v -> Exp Real
stop Exp Real -> Exp Real -> Exp Bool
forall a. Comparison a => Exp a -> Exp a -> Exp Bool
>* Exp (T VectorSize Real) -> Exp Real
forall n a. (Positive n, C a) => Exp (T n a) -> Exp a
Serial.subsample Exp (T VectorSize Real)
v)
         T (T (T VectorSize Real)) (T (T VectorSize Real))
-> T (T Real) (T (T VectorSize Real))
-> T (T Real) (T (T VectorSize Real))
forall b c a. T b c -> T a b -> T a c
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
.
         Exp Real -> T (T (T VectorSize Real)) (T (T VectorSize Real))
forall n a v.
(Positive n, C a, Additive a, Value n a ~ v) =>
Exp a -> T v v
CausalPS.integrate Exp Real
start
         T (T (T VectorSize Real)) (T (T VectorSize Real))
-> T (T Real) (T (T VectorSize Real))
-> T (T Real) (T (T VectorSize Real))
forall b c a. T b c -> T a b -> T a c
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
.
         (Exp Real -> Exp (T VectorSize Real))
-> T (T Real) (T (T VectorSize Real))
forall ae a be b.
(Aggregate ae a, Aggregate be b) =>
(ae -> be) -> T a b
Causal.map Exp Real -> Exp (T VectorSize Real)
forall n a. (Positive n, C a) => Exp a -> Exp (T n a)
Serial.upsample