{-# LANGUAGE NoImplicitPrelude #-}
{-# LANGUAGE Rank2Types #-}
{- |
The Instruments in this module have the same causal arrow interface
as the ones in "Synthesizer.LLVM.Server.CausalPacked.Instrument",
but here we use the higher level interface
of the "Synthesizer.LLVM.Causal.FunctionalPlug" module.
-}
module Synthesizer.LLVM.Server.CausalPacked.InstrumentPlug (
   tineStereoFM,
   helixNoise,
   ) where

import Synthesizer.LLVM.Server.CausalPacked.Instrument (
          Control, DetuneBendModControl,
          WithEnvelopeControl, StereoChunk,
          pingControlledEnvelope,
          stringControlledEnvelope,
          reorderEnvelopeControl)
import Synthesizer.LLVM.Server.CausalPacked.Common (transposeModulation)
import Synthesizer.LLVM.Server.CommonPacked (VectorValue)
import Synthesizer.LLVM.Server.Common (
          SampleRate, expSampleRate, Real,
          Arg(Number), wrapped,
          constant, frequency, time)

import qualified Synthesizer.CausalIO.Process as PIO

import qualified Synthesizer.LLVM.Frame.Stereo as Stereo
import qualified Synthesizer.LLVM.Frame.SerialVector as Serial
import qualified Synthesizer.LLVM.Causal.Helix as Helix
import qualified Synthesizer.LLVM.Causal.FunctionalPlug as FP
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.Signal as Sig
import qualified Synthesizer.LLVM.Interpolation as Interpolation
import qualified Synthesizer.LLVM.Wave as WaveL
import Synthesizer.LLVM.Causal.FunctionalPlug (($&), (&|&))

import qualified Synthesizer.LLVM.MIDI.BendModulation as BM
import qualified Synthesizer.LLVM.MIDI as MIDIL
import qualified Synthesizer.Zip as Zip

import qualified LLVM.DSL.Expression as Expr
import LLVM.DSL.Expression (Exp)

import qualified LLVM.Extra.Multi.Value as MultiValue

import Control.Category ((.))
import Control.Applicative (liftA2, (<$>))

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


stereoFrequenciesFromDetuneBendModulation ::
   Exp Real ->
   (FP.T p inp (MultiValue.T Real),
    FP.T p inp (MultiValue.T (BM.T Real))) ->
   FP.T p inp (Stereo.T VectorValue)
stereoFrequenciesFromDetuneBendModulation :: forall p inp.
Exp Real
-> (T p inp (T Real), T p inp (T (T Real)))
-> T p inp (T (T (T VectorSize Real)))
stereoFrequenciesFromDetuneBendModulation Exp Real
speed (T p inp (T Real)
detune, T p 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 p inp (T (T VectorSize Real), T (T (T VectorSize Real)))
-> T p inp (T (T (T VectorSize Real)))
forall a b pp inp. T a b -> T pp inp a -> T pp inp b
$&
      (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 p inp (T (T Real)) -> T p inp (T (T VectorSize Real))
forall a b pp inp. T a b -> T pp inp a -> T pp inp b
$&
         (T (T Real) -> T (T Real)
forall a. T (T a) -> T (T a)
BM.unMultiValue (T (T Real) -> T (T Real))
-> T p inp (T (T Real)) -> T p inp (T (T Real))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> T p inp (T (T Real))
freq))
      T p inp (T (T VectorSize Real))
-> T p inp (T (T (T VectorSize Real)))
-> T p inp (T (T VectorSize Real), T (T (T VectorSize Real)))
forall pp inp a b. T pp inp a -> T pp inp b -> T pp inp (a, b)
&|&
      ((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 p inp (T (T Real)) -> T p inp (T (T (T VectorSize Real)))
forall a b pp inp. T a b -> T pp inp a -> T pp inp b
$&
       (T Real -> T Real -> T (T Real))
-> T p inp (T Real) -> T p inp (T Real) -> T p inp (T (T Real))
forall a b c. (a -> b -> c) -> T p inp a -> T p inp b -> T p 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 p inp (T Real)
forall a. C a => a
one T p inp (T Real) -> T p inp (T Real) -> T p inp (T Real)
forall a. C a => a -> a -> a
+ T p inp (T Real)
detune) (T p inp (T Real)
forall a. C a => a
one T p inp (T Real) -> T p inp (T Real) -> T p inp (T Real)
forall a. C a => a -> a -> a
- T p inp (T Real)
detune))

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)
  -> (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)
      -> (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)
-> (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)
-> (SampleRate Real, Real)
-> T (T Chunk
        (T (T (Control Real) (Control Real)) DetuneBendModControl))
     StereoChunk
osc (SampleRate Real
sr, Real
freq) (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 EnvelopeControl Chunk
-> T (T EnvelopeControl
        (T (T (Control Real) (Control Real)) DetuneBendModControl))
     (T Chunk
        (T (T (Control Real) (Control Real)) DetuneBendModControl))
forall (arrow :: * -> * -> *) b c a.
(Arrow arrow, Transform b, Transform c) =>
arrow a b -> arrow (T a c) (T b c)
Zip.arrowFirstShorten (SampleRate Real -> Real -> T EnvelopeControl Chunk
env SampleRate Real
sr Real
vel)
         T (T EnvelopeControl
     (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 EnvelopeControl
        (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 (WithEnvelopeControl
     (T (T (Control Real) (Control Real)) DetuneBendModControl))
  (T EnvelopeControl
     (T (T (Control Real) (Control Real)) DetuneBendModControl))
forall (arrow :: * -> * -> *) remainder.
(Arrow arrow, Read remainder) =>
arrow (WithEnvelopeControl remainder) (T EnvelopeControl remainder)
reorderEnvelopeControl)
      ((Arguments
   (Input
      (SampleRate Real, Real)
      (T Chunk
         (T (T (Control Real) (Control Real)) DetuneBendModControl)))
   (T Chunk
      (T (T (Control Real) (Control Real)) DetuneBendModControl))
 -> Exp (SampleRate Real, Real)
 -> T (SampleRate Real, Real)
      (T Chunk
         (T (T (Control Real) (Control Real)) DetuneBendModControl))
      (Element StereoChunk))
-> IO
     ((SampleRate Real, Real)
      -> (SampleRate Real, Real)
      -> T (T Chunk
              (T (T (Control Real) (Control Real)) DetuneBendModControl))
           StereoChunk)
forall pl a b pp.
(C pl, MakeArguments a, Default b) =>
(Arguments (Input pp a) a -> Exp pl -> T pp a (Element b))
-> IO (pp -> pl -> T a b)
FP.withArgs ((Arguments
    (Input
       (SampleRate Real, Real)
       (T Chunk
          (T (T (Control Real) (Control Real)) DetuneBendModControl)))
    (T Chunk
       (T (T (Control Real) (Control Real)) DetuneBendModControl))
  -> Exp (SampleRate Real, Real)
  -> T (SampleRate Real, Real)
       (T Chunk
          (T (T (Control Real) (Control Real)) DetuneBendModControl))
       (Element StereoChunk))
 -> IO
      ((SampleRate Real, Real)
       -> (SampleRate Real, Real)
       -> T (T Chunk
               (T (T (Control Real) (Control Real)) DetuneBendModControl))
            StereoChunk))
-> (Arguments
      (Input
         (SampleRate Real, Real)
         (T Chunk
            (T (T (Control Real) (Control Real)) DetuneBendModControl)))
      (T Chunk
         (T (T (Control Real) (Control Real)) DetuneBendModControl))
    -> Exp (SampleRate Real, Real)
    -> T (SampleRate Real, Real)
         (T Chunk
            (T (T (Control Real) (Control Real)) DetuneBendModControl))
         (Element StereoChunk))
-> IO
     ((SampleRate Real, Real)
      -> (SampleRate Real, Real)
      -> T (T Chunk
              (T (T (Control Real) (Control Real)) DetuneBendModControl))
           StereoChunk)
forall a b. (a -> b) -> a -> b
$ \(Input
  (SampleRate Real, Real)
  (T Chunk
     (T (T (Control Real) (Control Real)) DetuneBendModControl))
  Chunk
env, ((Input
  (SampleRate Real, Real)
  (T Chunk
     (T (T (Control Real) (Control Real)) DetuneBendModControl))
  (Control Real)
index0,Input
  (SampleRate Real, Real)
  (T Chunk
     (T (T (Control Real) (Control Real)) DetuneBendModControl))
  (Control Real)
depth0), (Input
  (SampleRate Real, Real)
  (T Chunk
     (T (T (Control Real) (Control Real)) DetuneBendModControl))
  (Control Real)
detune,ReaderT
  ((SampleRate Real, Real),
   T Chunk (T (T (Control Real) (Control Real)) DetuneBendModControl))
  Identity
  (T (T Int) (T Real))
fm))) Exp (SampleRate Real, Real)
pl ->
       (\SampleRate (Exp Real)
-> Exp Real
-> T (SampleRate Real, Real)
     (T Chunk
        (T (T (Control Real) (Control Real)) DetuneBendModControl))
     (T (T (T VectorSize Real)))
f -> case Exp (SampleRate Real, Real) -> (Exp (SampleRate Real), Exp Real)
forall (val :: * -> *) a b.
Value val =>
val (a, b) -> (val a, val b)
Expr.unzip Exp (SampleRate Real, Real)
pl of (Exp (SampleRate Real)
sr,Exp Real
vel) -> SampleRate (Exp Real)
-> Exp Real
-> T (SampleRate Real, Real)
     (T Chunk
        (T (T (Control Real) (Control Real)) DetuneBendModControl))
     (T (T (T VectorSize Real)))
f (Exp (SampleRate Real) -> SampleRate (Exp Real)
forall a. Exp (SampleRate a) -> SampleRate (Exp a)
expSampleRate Exp (SampleRate Real)
sr) Exp Real
vel) ((SampleRate (Exp Real)
  -> Exp Real
  -> T (SampleRate Real, Real)
       (T Chunk
          (T (T (Control Real) (Control Real)) DetuneBendModControl))
       (T (T (T VectorSize Real))))
 -> T (SampleRate Real, Real)
      (T Chunk
         (T (T (Control Real) (Control Real)) DetuneBendModControl))
      (Element StereoChunk))
-> (SampleRate (Exp Real)
    -> Exp Real
    -> T (SampleRate Real, Real)
         (T Chunk
            (T (T (Control Real) (Control Real)) DetuneBendModControl))
         (T (T (T VectorSize Real))))
-> T (SampleRate Real, Real)
     (T Chunk
        (T (T (Control Real) (Control Real)) DetuneBendModControl))
     (Element StereoChunk)
forall a b. (a -> b) -> a -> b
$
       (Arg Number (Exp Real)
 -> SampleRate (Exp Real)
 -> T (SampleRate Real, Real)
      (T Chunk
         (T (T (Control Real) (Control Real)) DetuneBendModControl))
      (T (T (T VectorSize Real))))
-> SampleRate (Exp Real)
-> Unwrapped
     (Arg Number (Exp Real)
      -> SampleRate (Exp Real)
      -> T (SampleRate Real, Real)
           (T Chunk
              (T (T (Control Real) (Control Real)) DetuneBendModControl))
           (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 (SampleRate Real, Real)
       (T Chunk
          (T (T (Control Real) (Control Real)) DetuneBendModControl))
       (T (T (T VectorSize Real))))
 -> SampleRate (Exp Real)
 -> Unwrapped
      (Arg Number (Exp Real)
       -> SampleRate (Exp Real)
       -> T (SampleRate Real, Real)
            (T Chunk
               (T (T (Control Real) (Control Real)) DetuneBendModControl))
            (T (T (T VectorSize Real)))))
-> (Arg Number (Exp Real)
    -> SampleRate (Exp Real)
    -> T (SampleRate Real, Real)
         (T Chunk
            (T (T (Control Real) (Control Real)) DetuneBendModControl))
         (T (T (T VectorSize Real))))
-> SampleRate (Exp Real)
-> Unwrapped
     (Arg Number (Exp Real)
      -> SampleRate (Exp Real)
      -> T (SampleRate Real, Real)
           (T Chunk
              (T (T (Control Real) (Control Real)) DetuneBendModControl))
           (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 (SampleRate Real, Real)
         (T Chunk
            (T (T (Control Real) (Control Real)) DetuneBendModControl))
         (T (T (T VectorSize Real))))
-> SampleRate (Exp Real)
-> T (SampleRate Real, Real)
     (T Chunk
        (T (T (Control Real) (Control Real)) DetuneBendModControl))
     (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 (SampleRate Real, Real)
       (T Chunk
          (T (T (Control Real) (Control Real)) DetuneBendModControl))
       (T (T (T VectorSize Real))))
 -> SampleRate (Exp Real)
 -> T (SampleRate Real, Real)
      (T Chunk
         (T (T (Control Real) (Control Real)) DetuneBendModControl))
      (T (T (T VectorSize Real))))
-> (Exp Real
    -> SampleRate (Exp Real)
    -> T (SampleRate Real, Real)
         (T Chunk
            (T (T (Control Real) (Control Real)) DetuneBendModControl))
         (T (T (T VectorSize Real))))
-> SampleRate (Exp Real)
-> T (SampleRate Real, Real)
     (T Chunk
        (T (T (Control Real) (Control Real)) DetuneBendModControl))
     (T (T (T VectorSize Real)))
forall a b. (a -> b) -> a -> b
$ \Exp Real
halfLife ->
       (SampleRate (Exp Real) -> Exp Real -> Exp Real)
-> Exp Real
-> (Exp Real
    -> SampleRate (Exp Real)
    -> T (SampleRate Real, Real)
         (T Chunk
            (T (T (Control Real) (Control Real)) DetuneBendModControl))
         (T (T (T VectorSize Real))))
-> SampleRate (Exp Real)
-> T (SampleRate Real, Real)
     (T Chunk
        (T (T (Control Real) (Control Real)) DetuneBendModControl))
     (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 (SampleRate Real, Real)
       (T Chunk
          (T (T (Control Real) (Control Real)) DetuneBendModControl))
       (T (T (T VectorSize Real))))
 -> SampleRate (Exp Real)
 -> T (SampleRate Real, Real)
      (T Chunk
         (T (T (Control Real) (Control Real)) DetuneBendModControl))
      (T (T (T VectorSize Real))))
-> (Exp Real
    -> SampleRate (Exp Real)
    -> T (SampleRate Real, Real)
         (T Chunk
            (T (T (Control Real) (Control Real)) DetuneBendModControl))
         (T (T (T VectorSize Real))))
-> SampleRate (Exp Real)
-> T (SampleRate Real, Real)
     (T Chunk
        (T (T (Control Real) (Control Real)) DetuneBendModControl))
     (T (T (T VectorSize Real)))
forall a b. (a -> b) -> a -> b
$ \Exp Real
speed SampleRate (Exp Real)
_sr ->
         let freqs :: T (SampleRate Real, Real)
  (T Chunk
     (T (T (Control Real) (Control Real)) DetuneBendModControl))
  (T (T (T VectorSize Real)))
freqs =
                Exp Real
-> (T (SampleRate Real, Real)
      (T Chunk
         (T (T (Control Real) (Control Real)) DetuneBendModControl))
      (T Real),
    T (SampleRate Real, Real)
      (T Chunk
         (T (T (Control Real) (Control Real)) DetuneBendModControl))
      (T (T Real)))
-> T (SampleRate Real, Real)
     (T Chunk
        (T (T (Control Real) (Control Real)) DetuneBendModControl))
     (T (T (T VectorSize Real)))
forall p inp.
Exp Real
-> (T p inp (T Real), T p inp (T (T Real)))
-> T p inp (T (T (T VectorSize Real)))
stereoFrequenciesFromDetuneBendModulation
                   Exp Real
speed
                   (Input
  (SampleRate Real, Real)
  (T Chunk
     (T (T (Control Real) (Control Real)) DetuneBendModControl))
  (Control Real)
-> T (SampleRate Real, Real)
     (T Chunk
        (T (T (Control Real) (Control Real)) DetuneBendModControl))
     (Element (Control Real))
forall b pp a.
(Read b, Default b) =>
Input pp a b -> T pp a (Element b)
FP.plug Input
  (SampleRate Real, Real)
  (T Chunk
     (T (T (Control Real) (Control Real)) DetuneBendModControl))
  (Control Real)
detune,
                    ReaderT
  ((SampleRate Real, Real),
   T Chunk (T (T (Control Real) (Control Real)) DetuneBendModControl))
  Identity
  (T (T Int) (T Real))
-> T (SampleRate Real, Real)
     (T Chunk
        (T (T (Control Real) (Control Real)) DetuneBendModControl))
     (Element (T (T Int) (T Real)))
forall b pp a.
(Read b, Default b) =>
Input pp a b -> T pp a (Element b)
FP.plug (ReaderT
   ((SampleRate Real, Real),
    T Chunk (T (T (Control Real) (Control Real)) DetuneBendModControl))
   Identity
   (T (T Int) (T Real))
 -> T (SampleRate Real, Real)
      (T Chunk
         (T (T (Control Real) (Control Real)) DetuneBendModControl))
      (Element (T (T Int) (T Real))))
-> ReaderT
     ((SampleRate Real, Real),
      T Chunk (T (T (Control Real) (Control Real)) DetuneBendModControl))
     Identity
     (T (T Int) (T Real))
-> T (SampleRate Real, Real)
     (T Chunk
        (T (T (Control Real) (Control Real)) DetuneBendModControl))
     (Element (T (T Int) (T Real)))
forall a b. (a -> b) -> a -> b
$
                      ((SampleRate Real, Real)
 -> T (T Int) (T Real) -> T (T Int) (T Real))
-> ReaderT
     ((SampleRate Real, Real),
      T Chunk (T (T (Control Real) (Control Real)) DetuneBendModControl))
     Identity
     (SampleRate Real, Real)
-> ReaderT
     ((SampleRate Real, Real),
      T Chunk (T (T (Control Real) (Control Real)) DetuneBendModControl))
     Identity
     (T (T Int) (T Real))
-> ReaderT
     ((SampleRate Real, Real),
      T Chunk (T (T (Control Real) (Control Real)) DetuneBendModControl))
     Identity
     (T (T Int) (T Real))
forall a b c.
(a -> b -> c)
-> ReaderT
     ((SampleRate Real, Real),
      T Chunk (T (T (Control Real) (Control Real)) DetuneBendModControl))
     Identity
     a
-> ReaderT
     ((SampleRate Real, Real),
      T Chunk (T (T (Control Real) (Control Real)) DetuneBendModControl))
     Identity
     b
-> ReaderT
     ((SampleRate Real, Real),
      T Chunk (T (T (Control Real) (Control Real)) DetuneBendModControl))
     Identity
     c
forall (f :: * -> *) a b c.
Applicative f =>
(a -> b -> c) -> f a -> f b -> f c
liftA2 ((SampleRate Real
 -> Real -> T (T Int) (T Real) -> T (T Int) (T Real))
-> (SampleRate Real, Real)
-> T (T Int) (T Real)
-> T (T Int) (T Real)
forall a b c. (a -> b -> c) -> (a, b) -> c
uncurry SampleRate Real -> Real -> T (T Int) (T Real) -> T (T Int) (T Real)
forall (stream :: * -> *).
Functor stream =>
SampleRate Real -> Real -> stream (T Real) -> stream (T Real)
transposeModulation) ReaderT
  ((SampleRate Real, Real),
   T Chunk (T (T (Control Real) (Control Real)) DetuneBendModControl))
  Identity
  (SampleRate Real, Real)
forall pp a. Input pp a pp
FP.askParameter ReaderT
  ((SampleRate Real, Real),
   T Chunk (T (T (Control Real) (Control Real)) DetuneBendModControl))
  Identity
  (T (T Int) (T Real))
fm)
             index :: T (SampleRate Real, Real)
  (T Chunk
     (T (T (Control Real) (Control Real)) DetuneBendModControl))
  (T (T VectorSize Real))
index = (Exp Real -> Exp (T VectorSize Real))
-> T (Element (Control 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 (Element (Control Real)) (T (T VectorSize Real))
-> T (SampleRate Real, Real)
     (T Chunk
        (T (T (Control Real) (Control Real)) DetuneBendModControl))
     (Element (Control Real))
-> T (SampleRate Real, Real)
     (T Chunk
        (T (T (Control Real) (Control Real)) DetuneBendModControl))
     (T (T VectorSize Real))
forall a b pp inp. T a b -> T pp inp a -> T pp inp b
$& Input
  (SampleRate Real, Real)
  (T Chunk
     (T (T (Control Real) (Control Real)) DetuneBendModControl))
  (Control Real)
-> T (SampleRate Real, Real)
     (T Chunk
        (T (T (Control Real) (Control Real)) DetuneBendModControl))
     (Element (Control Real))
forall b pp a.
(Read b, Default b) =>
Input pp a b -> T pp a (Element b)
FP.plug Input
  (SampleRate Real, Real)
  (T Chunk
     (T (T (Control Real) (Control Real)) DetuneBendModControl))
  (Control Real)
index0
             depth :: T (SampleRate Real, Real)
  (T Chunk
     (T (T (Control Real) (Control Real)) DetuneBendModControl))
  (T (T VectorSize Real))
depth = (Exp Real -> Exp (T VectorSize Real))
-> T (Element (Control 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 (Element (Control Real)) (T (T VectorSize Real))
-> T (SampleRate Real, Real)
     (T Chunk
        (T (T (Control Real) (Control Real)) DetuneBendModControl))
     (Element (Control Real))
-> T (SampleRate Real, Real)
     (T Chunk
        (T (T (Control Real) (Control Real)) DetuneBendModControl))
     (T (T VectorSize Real))
forall a b pp inp. T a b -> T pp inp a -> T pp inp b
$& Input
  (SampleRate Real, Real)
  (T Chunk
     (T (T (Control Real) (Control Real)) DetuneBendModControl))
  (Control Real)
-> T (SampleRate Real, Real)
     (T Chunk
        (T (T (Control Real) (Control Real)) DetuneBendModControl))
     (Element (Control Real))
forall b pp a.
(Read b, Default b) =>
Input pp a b -> T pp a (Element b)
FP.plug Input
  (SampleRate Real, Real)
  (T Chunk
     (T (T (Control Real) (Control Real)) DetuneBendModControl))
  (Control Real)
depth0
             expo :: T pp inp (T (T VectorSize Real))
expo = T (T (T VectorSize Real)) -> T pp inp (T (T VectorSize Real))
forall a pp inp. T a -> T pp inp a
FP.fromSignal (T (T (T VectorSize Real)) -> T pp inp (T (T VectorSize Real)))
-> T (T (T VectorSize Real)) -> T pp 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 (SampleRate Real, Real)
  (T Chunk
     (T (T (Control Real) (Control Real)) DetuneBendModControl))
  (T (T VectorSize Real))
-> T (SampleRate Real, Real)
     (T Chunk
        (T (T (Control Real) (Control Real)) DetuneBendModControl))
     (T (T VectorSize Real))
osci T (SampleRate Real, Real)
  (T Chunk
     (T (T (Control Real) (Control Real)) DetuneBendModControl))
  (T (T VectorSize Real))
freq =
                (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 (SampleRate Real, Real)
     (T Chunk
        (T (T (Control Real) (Control Real)) DetuneBendModControl))
     (T (T VectorSize Real), T (T VectorSize Real))
-> T (SampleRate Real, Real)
     (T Chunk
        (T (T (Control Real) (Control Real)) DetuneBendModControl))
     (T (T VectorSize Real))
forall a b pp inp. T a b -> T pp inp a -> T pp inp b
$&
                   T (SampleRate Real, Real)
  (T Chunk
     (T (T (Control Real) (Control Real)) DetuneBendModControl))
  (T (T VectorSize Real))
forall {pp} {inp}. T pp inp (T (T VectorSize Real))
expo T (SampleRate Real, Real)
  (T Chunk
     (T (T (Control Real) (Control Real)) DetuneBendModControl))
  (T (T VectorSize Real))
-> T (SampleRate Real, Real)
     (T Chunk
        (T (T (Control Real) (Control Real)) DetuneBendModControl))
     (T (T VectorSize Real))
-> T (SampleRate Real, Real)
     (T Chunk
        (T (T (Control Real) (Control Real)) DetuneBendModControl))
     (T (T VectorSize Real))
forall a. C a => a -> a -> a
* T (SampleRate Real, Real)
  (T Chunk
     (T (T (Control Real) (Control Real)) DetuneBendModControl))
  (T (T VectorSize Real))
depth T (SampleRate Real, Real)
  (T Chunk
     (T (T (Control Real) (Control Real)) DetuneBendModControl))
  (T (T VectorSize Real))
-> T (SampleRate Real, Real)
     (T Chunk
        (T (T (Control Real) (Control Real)) DetuneBendModControl))
     (T (T VectorSize Real))
-> T (SampleRate Real, Real)
     (T Chunk
        (T (T (Control Real) (Control Real)) DetuneBendModControl))
     (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 (SampleRate Real, Real)
     (T Chunk
        (T (T (Control Real) (Control Real)) DetuneBendModControl))
     (T (T VectorSize Real), T (T VectorSize Real))
-> T (SampleRate Real, Real)
     (T Chunk
        (T (T (Control Real) (Control Real)) DetuneBendModControl))
     (T (T VectorSize Real))
forall a b pp inp. T a b -> T pp inp a -> T pp inp b
$& T (SampleRate Real, Real)
  (T Chunk
     (T (T (Control Real) (Control Real)) DetuneBendModControl))
  (T (T VectorSize Real))
forall a. C a => a
zero T (SampleRate Real, Real)
  (T Chunk
     (T (T (Control Real) (Control Real)) DetuneBendModControl))
  (T (T VectorSize Real))
-> T (SampleRate Real, Real)
     (T Chunk
        (T (T (Control Real) (Control Real)) DetuneBendModControl))
     (T (T VectorSize Real))
-> T (SampleRate Real, Real)
     (T Chunk
        (T (T (Control Real) (Control Real)) DetuneBendModControl))
     (T (T VectorSize Real), T (T VectorSize Real))
forall pp inp a b. T pp inp a -> T pp inp b -> T pp inp (a, b)
&|& T (SampleRate Real, Real)
  (T Chunk
     (T (T (Control Real) (Control Real)) DetuneBendModControl))
  (T (T VectorSize Real))
indexT (SampleRate Real, Real)
  (T Chunk
     (T (T (Control Real) (Control Real)) DetuneBendModControl))
  (T (T VectorSize Real))
-> T (SampleRate Real, Real)
     (T Chunk
        (T (T (Control Real) (Control Real)) DetuneBendModControl))
     (T (T VectorSize Real))
-> T (SampleRate Real, Real)
     (T Chunk
        (T (T (Control Real) (Control Real)) DetuneBendModControl))
     (T (T VectorSize Real))
forall a. C a => a -> a -> a
*T (SampleRate Real, Real)
  (T Chunk
     (T (T (Control Real) (Control Real)) DetuneBendModControl))
  (T (T VectorSize Real))
freq)
                   T (SampleRate Real, Real)
  (T Chunk
     (T (T (Control Real) (Control Real)) DetuneBendModControl))
  (T (T VectorSize Real))
-> T (SampleRate Real, Real)
     (T Chunk
        (T (T (Control Real) (Control Real)) DetuneBendModControl))
     (T (T VectorSize Real))
-> T (SampleRate Real, Real)
     (T Chunk
        (T (T (Control Real) (Control Real)) DetuneBendModControl))
     (T (T VectorSize Real), T (T VectorSize Real))
forall pp inp a b. T pp inp a -> T pp inp b -> T pp inp (a, b)
&|&
                   T (SampleRate Real, Real)
  (T Chunk
     (T (T (Control Real) (Control Real)) DetuneBendModControl))
  (T (T VectorSize Real))
freq
         in (T (T (T VectorSize Real)) -> T (T (T VectorSize Real)))
-> T (SampleRate Real, Real)
     (T Chunk
        (T (T (Control Real) (Control Real)) DetuneBendModControl))
     (T (T (T VectorSize Real)))
-> T (SampleRate Real, Real)
     (T Chunk
        (T (T (Control Real) (Control Real)) DetuneBendModControl))
     (T (T (T VectorSize Real)))
forall a b.
(a -> b)
-> T (SampleRate Real, Real)
     (T Chunk
        (T (T (Control Real) (Control Real)) DetuneBendModControl))
     a
-> T (SampleRate Real, Real)
     (T Chunk
        (T (T (Control Real) (Control Real)) DetuneBendModControl))
     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 (SampleRate Real, Real)
   (T Chunk
      (T (T (Control Real) (Control Real)) DetuneBendModControl))
   (T (T (T VectorSize Real)))
 -> T (SampleRate Real, Real)
      (T Chunk
         (T (T (Control Real) (Control Real)) DetuneBendModControl))
      (T (T (T VectorSize Real))))
-> T (SampleRate Real, Real)
     (T Chunk
        (T (T (Control Real) (Control Real)) DetuneBendModControl))
     (T (T (T VectorSize Real)))
-> T (SampleRate Real, Real)
     (T Chunk
        (T (T (Control Real) (Control Real)) DetuneBendModControl))
     (T (T (T VectorSize Real)))
forall a b. (a -> b) -> a -> 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 (SampleRate Real, Real)
     (T Chunk
        (T (T (Control Real) (Control Real)) DetuneBendModControl))
     (T (T VectorSize Real), T (T (T VectorSize Real)))
-> T (SampleRate Real, Real)
     (T Chunk
        (T (T (Control Real) (Control Real)) DetuneBendModControl))
     (T (T (T VectorSize Real)))
forall a b pp inp. T a b -> T pp inp a -> T pp inp b
$&
               Input
  (SampleRate Real, Real)
  (T Chunk
     (T (T (Control Real) (Control Real)) DetuneBendModControl))
  Chunk
-> T (SampleRate Real, Real)
     (T Chunk
        (T (T (Control Real) (Control Real)) DetuneBendModControl))
     (Element Chunk)
forall b pp a.
(Read b, Default b) =>
Input pp a b -> T pp a (Element b)
FP.plug Input
  (SampleRate Real, Real)
  (T Chunk
     (T (T (Control Real) (Control Real)) DetuneBendModControl))
  Chunk
env T (SampleRate Real, Real)
  (T Chunk
     (T (T (Control Real) (Control Real)) DetuneBendModControl))
  (T (T VectorSize Real))
-> T (SampleRate Real, Real)
     (T Chunk
        (T (T (Control Real) (Control Real)) DetuneBendModControl))
     (T (T (T VectorSize Real)))
-> T (SampleRate Real, Real)
     (T Chunk
        (T (T (Control Real) (Control Real)) DetuneBendModControl))
     (T (T VectorSize Real), T (T (T VectorSize Real)))
forall pp inp a b. T pp inp a -> T pp inp b -> T pp inp (a, b)
&|& (T (SampleRate Real, Real)
   (T Chunk
      (T (T (Control Real) (Control Real)) DetuneBendModControl))
   (T (T VectorSize Real))
 -> T (SampleRate Real, Real)
      (T Chunk
         (T (T (Control Real) (Control Real)) DetuneBendModControl))
      (T (T VectorSize Real)))
-> T (SampleRate Real, Real)
     (T Chunk
        (T (T (Control Real) (Control Real)) DetuneBendModControl))
     (T (T (T VectorSize Real)))
-> T (SampleRate Real, Real)
     (T Chunk
        (T (T (Control Real) (Control Real)) DetuneBendModControl))
     (T (T (T VectorSize Real)))
forall (f :: * -> *) a b.
Applicative f =>
(f a -> f b) -> f (T a) -> f (T b)
Stereo.liftApplicative T (SampleRate Real, Real)
  (T Chunk
     (T (T (Control Real) (Control Real)) DetuneBendModControl))
  (T (T VectorSize Real))
-> T (SampleRate Real, Real)
     (T Chunk
        (T (T (Control Real) (Control Real)) DetuneBendModControl))
     (T (T VectorSize Real))
osci T (SampleRate Real, Real)
  (T Chunk
     (T (T (Control Real) (Control Real)) DetuneBendModControl))
  (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))


helixNoise ::
   IO (SampleRate Real -> Real -> Real ->
       PIO.T
          (WithEnvelopeControl
             (Zip.T (Control Real) DetuneBendModControl))
          StereoChunk)
helixNoise :: IO
  (SampleRate Real
   -> Real
   -> Real
   -> T (WithEnvelopeControl (T (Control Real) DetuneBendModControl))
        StereoChunk)
helixNoise =
   (((SampleRate Real, Real)
  -> SampleRate Real
  -> T (T Chunk (T (Control Real) DetuneBendModControl)) StereoChunk)
 -> (SampleRate Real -> Real -> T EnvelopeControl Chunk)
 -> SampleRate Real
 -> Real
 -> Real
 -> T (WithEnvelopeControl (T (Control Real) DetuneBendModControl))
      StereoChunk)
-> IO
     ((SampleRate Real, Real)
      -> SampleRate Real
      -> T (T Chunk (T (Control Real) DetuneBendModControl)) StereoChunk)
-> IO (SampleRate Real -> Real -> T EnvelopeControl Chunk)
-> IO
     (SampleRate Real
      -> Real
      -> Real
      -> T (WithEnvelopeControl (T (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)
-> 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, Real)
-> SampleRate Real
-> T (T Chunk (T (Control Real) DetuneBendModControl)) StereoChunk
osc (SampleRate Real
sr, Real
freq) 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 EnvelopeControl Chunk
-> T (T EnvelopeControl (T (Control Real) DetuneBendModControl))
     (T Chunk (T (Control Real) DetuneBendModControl))
forall (arrow :: * -> * -> *) b c a.
(Arrow arrow, Transform b, Transform c) =>
arrow a b -> arrow (T a c) (T b c)
Zip.arrowFirstShorten (SampleRate Real -> Real -> T EnvelopeControl Chunk
env SampleRate Real
sr Real
vel)
         T (T EnvelopeControl (T (Control Real) DetuneBendModControl))
  (T Chunk (T (Control Real) DetuneBendModControl))
-> T (WithEnvelopeControl (T (Control Real) DetuneBendModControl))
     (T EnvelopeControl (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 (WithEnvelopeControl (T (Control Real) DetuneBendModControl))
  (T EnvelopeControl (T (Control Real) DetuneBendModControl))
forall (arrow :: * -> * -> *) remainder.
(Arrow arrow, Read remainder) =>
arrow (WithEnvelopeControl remainder) (T EnvelopeControl remainder)
reorderEnvelopeControl)
      ((Arguments
   (Input
      (SampleRate Real, Real)
      (T Chunk (T (Control Real) DetuneBendModControl)))
   (T Chunk (T (Control Real) DetuneBendModControl))
 -> Exp (SampleRate Real)
 -> T (SampleRate Real, Real)
      (T Chunk (T (Control Real) DetuneBendModControl))
      (Element StereoChunk))
-> IO
     ((SampleRate Real, Real)
      -> SampleRate Real
      -> T (T Chunk (T (Control Real) DetuneBendModControl)) StereoChunk)
forall pl a b pp.
(C pl, MakeArguments a, Default b) =>
(Arguments (Input pp a) a -> Exp pl -> T pp a (Element b))
-> IO (pp -> pl -> T a b)
FP.withArgs ((Arguments
    (Input
       (SampleRate Real, Real)
       (T Chunk (T (Control Real) DetuneBendModControl)))
    (T Chunk (T (Control Real) DetuneBendModControl))
  -> Exp (SampleRate Real)
  -> T (SampleRate Real, Real)
       (T Chunk (T (Control Real) DetuneBendModControl))
       (Element StereoChunk))
 -> IO
      ((SampleRate Real, Real)
       -> SampleRate Real
       -> T (T Chunk (T (Control Real) DetuneBendModControl))
            StereoChunk))
-> (Arguments
      (Input
         (SampleRate Real, Real)
         (T Chunk (T (Control Real) DetuneBendModControl)))
      (T Chunk (T (Control Real) DetuneBendModControl))
    -> Exp (SampleRate Real)
    -> T (SampleRate Real, Real)
         (T Chunk (T (Control Real) DetuneBendModControl))
         (Element StereoChunk))
-> IO
     ((SampleRate Real, Real)
      -> SampleRate Real
      -> T (T Chunk (T (Control Real) DetuneBendModControl)) StereoChunk)
forall a b. (a -> b) -> a -> b
$ \(Input
  (SampleRate Real, Real)
  (T Chunk (T (Control Real) DetuneBendModControl))
  Chunk
env, (Input
  (SampleRate Real, Real)
  (T Chunk (T (Control Real) DetuneBendModControl))
  (Control Real)
speed0, (Input
  (SampleRate Real, Real)
  (T Chunk (T (Control Real) DetuneBendModControl))
  (Control Real)
detune,ReaderT
  ((SampleRate Real, Real),
   T Chunk (T (Control Real) DetuneBendModControl))
  Identity
  (T (T Int) (T Real))
fm))) Exp (SampleRate Real)
sr ->
       (\SampleRate (Exp Real)
-> T (SampleRate Real, Real)
     (T Chunk (T (Control Real) DetuneBendModControl))
     (T (T (T VectorSize Real)))
f -> SampleRate (Exp Real)
-> T (SampleRate Real, Real)
     (T Chunk (T (Control Real) DetuneBendModControl))
     (T (T (T VectorSize Real)))
f (Exp (SampleRate Real) -> SampleRate (Exp Real)
forall a. Exp (SampleRate a) -> SampleRate (Exp a)
expSampleRate Exp (SampleRate Real)
sr)) ((SampleRate (Exp Real)
  -> T (SampleRate Real, Real)
       (T Chunk (T (Control Real) DetuneBendModControl))
       (T (T (T VectorSize Real))))
 -> T (SampleRate Real, Real)
      (T Chunk (T (Control Real) DetuneBendModControl))
      (Element StereoChunk))
-> (SampleRate (Exp Real)
    -> T (SampleRate Real, Real)
         (T Chunk (T (Control Real) DetuneBendModControl))
         (T (T (T VectorSize Real))))
-> T (SampleRate Real, Real)
     (T Chunk (T (Control Real) DetuneBendModControl))
     (Element StereoChunk)
forall a b. (a -> b) -> a -> b
$
       (SampleRate (Exp Real) -> Exp Real -> Exp Real)
-> Exp Real
-> (Exp Real
    -> SampleRate (Exp Real)
    -> T (SampleRate Real, Real)
         (T Chunk (T (Control Real) DetuneBendModControl))
         (T (T (T VectorSize Real))))
-> SampleRate (Exp Real)
-> T (SampleRate Real, Real)
     (T Chunk (T (Control Real) DetuneBendModControl))
     (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 (SampleRate Real, Real)
       (T Chunk (T (Control Real) DetuneBendModControl))
       (T (T (T VectorSize Real))))
 -> SampleRate (Exp Real)
 -> T (SampleRate Real, Real)
      (T Chunk (T (Control Real) DetuneBendModControl))
      (T (T (T VectorSize Real))))
-> (Exp Real
    -> SampleRate (Exp Real)
    -> T (SampleRate Real, Real)
         (T Chunk (T (Control Real) DetuneBendModControl))
         (T (T (T VectorSize Real))))
-> SampleRate (Exp Real)
-> T (SampleRate Real, Real)
     (T Chunk (T (Control Real) DetuneBendModControl))
     (T (T (T VectorSize Real)))
forall a b. (a -> b) -> a -> b
$ \Exp Real
modSpeed SampleRate (Exp Real)
_sr ->
         let freqs :: T (SampleRate Real, Real)
  (T Chunk (T (Control Real) DetuneBendModControl))
  (T (T (T VectorSize Real)))
freqs =
                Exp Real
-> (T (SampleRate Real, Real)
      (T Chunk (T (Control Real) DetuneBendModControl))
      (T Real),
    T (SampleRate Real, Real)
      (T Chunk (T (Control Real) DetuneBendModControl))
      (T (T Real)))
-> T (SampleRate Real, Real)
     (T Chunk (T (Control Real) DetuneBendModControl))
     (T (T (T VectorSize Real)))
forall p inp.
Exp Real
-> (T p inp (T Real), T p inp (T (T Real)))
-> T p inp (T (T (T VectorSize Real)))
stereoFrequenciesFromDetuneBendModulation
                   Exp Real
modSpeed
                   (Input
  (SampleRate Real, Real)
  (T Chunk (T (Control Real) DetuneBendModControl))
  (Control Real)
-> T (SampleRate Real, Real)
     (T Chunk (T (Control Real) DetuneBendModControl))
     (Element (Control Real))
forall b pp a.
(Read b, Default b) =>
Input pp a b -> T pp a (Element b)
FP.plug Input
  (SampleRate Real, Real)
  (T Chunk (T (Control Real) DetuneBendModControl))
  (Control Real)
detune,
                    ReaderT
  ((SampleRate Real, Real),
   T Chunk (T (Control Real) DetuneBendModControl))
  Identity
  (T (T Int) (T Real))
-> T (SampleRate Real, Real)
     (T Chunk (T (Control Real) DetuneBendModControl))
     (Element (T (T Int) (T Real)))
forall b pp a.
(Read b, Default b) =>
Input pp a b -> T pp a (Element b)
FP.plug (ReaderT
   ((SampleRate Real, Real),
    T Chunk (T (Control Real) DetuneBendModControl))
   Identity
   (T (T Int) (T Real))
 -> T (SampleRate Real, Real)
      (T Chunk (T (Control Real) DetuneBendModControl))
      (Element (T (T Int) (T Real))))
-> ReaderT
     ((SampleRate Real, Real),
      T Chunk (T (Control Real) DetuneBendModControl))
     Identity
     (T (T Int) (T Real))
-> T (SampleRate Real, Real)
     (T Chunk (T (Control Real) DetuneBendModControl))
     (Element (T (T Int) (T Real)))
forall a b. (a -> b) -> a -> b
$
                      ((SampleRate Real, Real)
 -> T (T Int) (T Real) -> T (T Int) (T Real))
-> ReaderT
     ((SampleRate Real, Real),
      T Chunk (T (Control Real) DetuneBendModControl))
     Identity
     (SampleRate Real, Real)
-> ReaderT
     ((SampleRate Real, Real),
      T Chunk (T (Control Real) DetuneBendModControl))
     Identity
     (T (T Int) (T Real))
-> ReaderT
     ((SampleRate Real, Real),
      T Chunk (T (Control Real) DetuneBendModControl))
     Identity
     (T (T Int) (T Real))
forall a b c.
(a -> b -> c)
-> ReaderT
     ((SampleRate Real, Real),
      T Chunk (T (Control Real) DetuneBendModControl))
     Identity
     a
-> ReaderT
     ((SampleRate Real, Real),
      T Chunk (T (Control Real) DetuneBendModControl))
     Identity
     b
-> ReaderT
     ((SampleRate Real, Real),
      T Chunk (T (Control Real) DetuneBendModControl))
     Identity
     c
forall (f :: * -> *) a b c.
Applicative f =>
(a -> b -> c) -> f a -> f b -> f c
liftA2 ((SampleRate Real
 -> Real -> T (T Int) (T Real) -> T (T Int) (T Real))
-> (SampleRate Real, Real)
-> T (T Int) (T Real)
-> T (T Int) (T Real)
forall a b c. (a -> b -> c) -> (a, b) -> c
uncurry SampleRate Real -> Real -> T (T Int) (T Real) -> T (T Int) (T Real)
forall (stream :: * -> *).
Functor stream =>
SampleRate Real -> Real -> stream (T Real) -> stream (T Real)
transposeModulation) ReaderT
  ((SampleRate Real, Real),
   T Chunk (T (Control Real) DetuneBendModControl))
  Identity
  (SampleRate Real, Real)
forall pp a. Input pp a pp
FP.askParameter ReaderT
  ((SampleRate Real, Real),
   T Chunk (T (Control Real) DetuneBendModControl))
  Identity
  (T (T Int) (T Real))
fm)
             speed :: T (SampleRate Real, Real)
  (T Chunk (T (Control Real) DetuneBendModControl))
  (T (T VectorSize Real))
speed = (Exp Real -> Exp (T VectorSize Real))
-> T (Element (Control 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 (Element (Control Real)) (T (T VectorSize Real))
-> T (SampleRate Real, Real)
     (T Chunk (T (Control Real) DetuneBendModControl))
     (Element (Control Real))
-> T (SampleRate Real, Real)
     (T Chunk (T (Control Real) DetuneBendModControl))
     (T (T VectorSize Real))
forall a b pp inp. T a b -> T pp inp a -> T pp inp b
$& Input
  (SampleRate Real, Real)
  (T Chunk (T (Control Real) DetuneBendModControl))
  (Control Real)
-> T (SampleRate Real, Real)
     (T Chunk (T (Control Real) DetuneBendModControl))
     (Element (Control Real))
forall b pp a.
(Read b, Default b) =>
Input pp a b -> T pp a (Element b)
FP.plug Input
  (SampleRate Real, Real)
  (T Chunk (T (Control Real) DetuneBendModControl))
  (Control Real)
speed0
         in (T (T (T VectorSize Real)) -> T (T (T VectorSize Real)))
-> T (SampleRate Real, Real)
     (T Chunk (T (Control Real) DetuneBendModControl))
     (T (T (T VectorSize Real)))
-> T (SampleRate Real, Real)
     (T Chunk (T (Control Real) DetuneBendModControl))
     (T (T (T VectorSize Real)))
forall a b.
(a -> b)
-> T (SampleRate Real, Real)
     (T Chunk (T (Control Real) DetuneBendModControl))
     a
-> T (SampleRate Real, Real)
     (T Chunk (T (Control Real) DetuneBendModControl))
     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 (SampleRate Real, Real)
   (T Chunk (T (Control Real) DetuneBendModControl))
   (T (T (T VectorSize Real)))
 -> T (SampleRate Real, Real)
      (T Chunk (T (Control Real) DetuneBendModControl))
      (T (T (T VectorSize Real))))
-> T (SampleRate Real, Real)
     (T Chunk (T (Control Real) DetuneBendModControl))
     (T (T (T VectorSize Real)))
-> T (SampleRate Real, Real)
     (T Chunk (T (Control Real) DetuneBendModControl))
     (T (T (T VectorSize Real)))
forall a b. (a -> b) -> a -> 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 (SampleRate Real, Real)
     (T Chunk (T (Control Real) DetuneBendModControl))
     (T (T VectorSize Real), T (T (T VectorSize Real)))
-> T (SampleRate Real, Real)
     (T Chunk (T (Control Real) DetuneBendModControl))
     (T (T (T VectorSize Real)))
forall a b pp inp. T a b -> T pp inp a -> T pp inp b
$&
               Input
  (SampleRate Real, Real)
  (T Chunk (T (Control Real) DetuneBendModControl))
  Chunk
-> T (SampleRate Real, Real)
     (T Chunk (T (Control Real) DetuneBendModControl))
     (Element Chunk)
forall b pp a.
(Read b, Default b) =>
Input pp a b -> T pp a (Element b)
FP.plug Input
  (SampleRate Real, Real)
  (T Chunk (T (Control Real) DetuneBendModControl))
  Chunk
env T (SampleRate Real, Real)
  (T Chunk (T (Control Real) DetuneBendModControl))
  (T (T VectorSize Real))
-> T (SampleRate Real, Real)
     (T Chunk (T (Control Real) DetuneBendModControl))
     (T (T (T VectorSize Real)))
-> T (SampleRate Real, Real)
     (T Chunk (T (Control Real) DetuneBendModControl))
     (T (T VectorSize Real), T (T (T VectorSize Real)))
forall pp inp a b. T pp inp a -> T pp inp b -> T pp inp (a, b)
&|& (T (SampleRate Real, Real)
   (T Chunk (T (Control Real) DetuneBendModControl))
   (T (T VectorSize Real))
 -> T (SampleRate Real, Real)
      (T Chunk (T (Control Real) DetuneBendModControl))
      (T (T VectorSize Real)))
-> T (SampleRate Real, Real)
     (T Chunk (T (Control Real) DetuneBendModControl))
     (T (T (T VectorSize Real)))
-> T (SampleRate Real, Real)
     (T Chunk (T (Control Real) DetuneBendModControl))
     (T (T (T VectorSize Real)))
forall (f :: * -> *) a b.
Applicative f =>
(f a -> f b) -> f (T a) -> f (T b)
Stereo.liftApplicative (T (SampleRate Real, Real)
  (T Chunk (T (Control Real) DetuneBendModControl))
  (T (T VectorSize Real))
-> T (SampleRate Real, Real)
     (T Chunk (T (Control Real) DetuneBendModControl))
     (T (T VectorSize Real))
-> T (SampleRate Real, Real)
     (T Chunk (T (Control Real) DetuneBendModControl))
     (T (T VectorSize Real))
forall pp inp.
T pp inp (T (T VectorSize Real))
-> T pp inp (T (T VectorSize Real))
-> T pp inp (T (T VectorSize Real))
helixOsci T (SampleRate Real, Real)
  (T Chunk (T (Control Real) DetuneBendModControl))
  (T (T VectorSize Real))
speed) T (SampleRate Real, Real)
  (T Chunk (T (Control Real) DetuneBendModControl))
  (T (T (T VectorSize Real)))
freqs)
      IO (SampleRate Real -> Real -> T EnvelopeControl Chunk)
stringControlledEnvelope

helixOsci ::
   FP.T pp inp VectorValue ->
   FP.T pp inp VectorValue ->
   FP.T pp inp VectorValue
helixOsci :: forall pp inp.
T pp inp (T (T VectorSize Real))
-> T pp inp (T (T VectorSize Real))
-> T pp inp (T (T VectorSize Real))
helixOsci T pp inp (T (T VectorSize Real))
speed T pp inp (T (T VectorSize Real))
freq =
   T (T Real, T Real) (T Real)
-> T (T (T VectorSize Real), 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
      ((forall r. T r Nodes13 (T Real) (T Real))
-> (forall r. T r Nodes13 (T Real) (T Real))
-> Exp Int
-> Exp Real
-> T (T Real)
-> T (T Real, T Real) (T Real)
forall (nodesStep :: * -> *) (nodesLeap :: * -> *) a ar am v.
(C nodesStep, C nodesLeap, C a, Field a, Fraction a, Select a,
 Comparison a, NativeFloating a ar, RationalConstant a,
 NativeFloating a ar, T a ~ am, C v) =>
(forall r. T r nodesLeap am v)
-> (forall r. T r nodesStep am v)
-> Exp Int
-> Exp a
-> T v
-> T (am, am) v
Helix.dynamicLimited T r Nodes13 (T Real) (T Real)
forall r. T r Nodes13 (T Real) (T Real)
forall a r. (Field a, RationalConstant a) => T r Nodes13 a a
Interpolation.cubic T r Nodes13 (T Real) (T Real)
forall r. T r Nodes13 (T Real) (T Real)
forall a r. (Field a, RationalConstant a) => T r Nodes13 a a
Interpolation.cubic
          Exp Int
64 (Exp Real
64 :: Exp Real) (Exp Word32 -> Exp Real -> T (T Real)
forall a ar.
(C a, Transcendental a, RationalConstant a, NativeFloating a ar) =>
Exp Word32 -> Exp a -> MV a
Sig.noise Exp Word32
66 Exp Real
0.2))
   T (T (T VectorSize Real), T (T VectorSize Real))
  (T (T VectorSize Real))
-> T pp inp (T (T VectorSize Real), T (T VectorSize Real))
-> T pp inp (T (T VectorSize Real))
forall a b pp inp. T a b -> T pp inp a -> T pp inp b
$&
   T pp inp (T (T VectorSize Real))
speed T pp inp (T (T VectorSize Real))
-> T pp inp (T (T VectorSize Real))
-> T pp inp (T (T VectorSize Real), T (T VectorSize Real))
forall pp inp a b. T pp inp a -> T pp inp b -> T pp inp (a, b)
&|&
   (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))
-> T pp inp (T (T VectorSize Real), T (T VectorSize Real))
-> T pp inp (T (T VectorSize Real))
forall a b pp inp. T a b -> T pp inp a -> T pp inp b
$& T pp inp (T (T VectorSize Real))
0 T pp inp (T (T VectorSize Real))
-> T pp inp (T (T VectorSize Real))
-> T pp inp (T (T VectorSize Real), T (T VectorSize Real))
forall pp inp a b. T pp inp a -> T pp inp b -> T pp inp (a, b)
&|& T pp inp (T (T VectorSize Real))
freq)