{-
ToDo:
organization:
   compile instrument when switching a MIDI program
      However caching and sharing might be a good idea
         like for quickly changing between tomatensalat syllabels.
      Ideally we just need to run instrument generation using unsafeInterleaveIO.
         This however will trigger instrument compilation
         when the sound is played the first time.
         This may cause buffer underruns.
         On the other hand, forcing instrument compilation on program changes
         might still cause buffer underruns.


instruments:
   tonal noise can be produced by modulating pink noise
      experimental: multiply with waveforms other than sine
   use bits of an ASCII code as waveform
   use a greymap picture as source of waveforms
   mix of detuned noisy-waverforms, try different and uniform waveforms
   mix of sawtooth, where every sawtooth is modulated with red noise
   mix of sine with harmonics where every harmonic is modulated differently
   Flute: sine + filtered noise
   Drum with various parameters
   derive percussive instruments from fmString and arcString (for bass synths)
   an FM sound with a slowly changing timbre
      by using a very slightly detuned frequency for the modulator
   making a tone out of noise using time stretch with helix algorithm
      a chorus effect could be applied by two successive helix stretches
      or by mixture of two stretches signals
      additionally a resonant filter could be applied
   a kind of Karplus-Strong algorithm with a non-linear function of past values
      e.g. y(t) = f(y(t-d), y(t-2*d))
      where d is the tone period and f is non-linear, maybe chaotic function.
      In order to limit the appearance of chaotic waveforms,
      we could combine this with a lowpass filter.
   let attack and release depend on On and Off velocity
   tineStereoFM:
      continuous control of the modulation index
      by linear interpolation of waves between modulations with integral indices.
      E.g. modulation index 2.3 means
      0.7*modulation with index 2 and 0.3*modulation with index 3.

effects:
   reverb and controllable delay
   phaser or Chebyshev filter
   reverb where many single combs are mixed
      every comb has ever-increasing frequency, but is faded in and out.
      Should give an endless effect where the reverb becomes higher and higher.

continuous sounds:
   fly
   water/bubbles
      when I accidentally did not scale filter frequency with sample rate,
      the filter sound much like water bubbles.
      I think a control curve consisting of some ramps will do the same.
   hail, Geiger counter, pitch applied by comb filter
      at a very high impulse rate the impulses itself
      can generate an almost periodic signal


Speech sounds improvements (tomatensalat)
   use PSOLA for transposition
   To this end divide signal into tonal part and residue (noise)
   by a comb filter.
   Maybe a non-linear comb filter may help,
   that selects the center value from the filter window,
   if the side values are similar
   and returns zero, if the the side values differ too much.
   Process the tonal part by PSOLA and
   simply mix it with the non-tonal part on replay.

Harmonizer-like:
   We like to input an audio signal of speech
   and a set of keys, and the speech is extended to chords
   according to the pressed keys.
   The lowest key is interpreted as base frequency of the input audio speech.
   A PSOLA method transposes the audio input.

Resonant filter controlled by keys
   applied to an audio input signal
   or an ordinary audio signal generated by other keys.
   The splitting of keys however could be performed
   by a MIDI event stream editor.
-}

{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE TypeOperators #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE Rank2Types #-}
{-# LANGUAGE EmptyDataDecls #-}
module Synthesizer.LLVM.Server.Packed.Instrument (
   InputArg(..),
   FrequencyControl,
   Modulation,
   DetuneModulation,

   pingRelease,
   pingStereoRelease,
   pingStereoReleaseFM,
   squareStereoReleaseFM,
   bellStereoFM,
   bellNoiseStereoFM,
   tine,
   tineStereo,
   softString,
   softStringFM,
   tineStereoFM,
   tineControlledFM,
   fenderFM,
   tineModulatorBankFM,
   tineBankFM,
   resonantFMSynth,
   softStringDetuneFM,
   softStringShapeFM, cosineStringStereoFM,
   arcSineStringStereoFM, arcTriangleStringStereoFM,
   arcSquareStringStereoFM, arcSawStringStereoFM,
   fmStringStereoFM,
   wind,
   windPhaser,
   filterSawStereoFM,
   brass,
   sampledSound,

   -- * helper functions
   stereoNoise,
   frequencyFromBendModulation,
   piecewiseConstantVector,

   -- * for testing
   pingReleaseEnvelope,
   adsr,
   ) where

import Synthesizer.LLVM.Server.CommonPacked
import Synthesizer.LLVM.Server.Common

import qualified Synthesizer.LLVM.Server.SampledSound as Sample
import qualified Synthesizer.LLVM.MIDI.BendModulation as BM
import qualified Synthesizer.LLVM.ConstantPiece as Const
import qualified Synthesizer.MIDI.PiecewiseConstant as PC
import qualified Synthesizer.MIDI.EventList as Ev

import Synthesizer.MIDI.Storable (chunkSizesFromLazyTime)

import qualified Synthesizer.LLVM.Frame.Stereo as Stereo
import qualified Synthesizer.LLVM.Filter.Universal as UniFilterL
import qualified Synthesizer.LLVM.Filter.Allpass as Allpass
import qualified Synthesizer.LLVM.Filter.Moog as MoogL
import qualified Synthesizer.LLVM.MIDI as MIDIL
import qualified Synthesizer.LLVM.Causal.Render as CausalRender
import qualified Synthesizer.LLVM.Causal.ControlledPacked as CtrlPS
import qualified Synthesizer.LLVM.Causal.ProcessPacked as CausalPS
import qualified Synthesizer.LLVM.Causal.Process as Causal
import qualified Synthesizer.LLVM.Causal.Functional as F
import qualified Synthesizer.LLVM.Generator.Render as Render
import qualified Synthesizer.LLVM.Generator.SignalPacked as SigPS
import qualified Synthesizer.LLVM.Generator.Signal as Sig
import qualified Synthesizer.LLVM.Storable.Signal as SigStL
import qualified Synthesizer.LLVM.Frame.SerialVector as Serial
import qualified Synthesizer.LLVM.Frame as Frame
import qualified Synthesizer.LLVM.Wave as WaveL
import Synthesizer.LLVM.Causal.Process (($<#), ($*), ($<), ($>))
import Synthesizer.LLVM.Causal.Functional (($&), (&|&))

import qualified LLVM.DSL.Expression as Expr
import qualified LLVM.Extra.Multi.Value as MultiValue
import LLVM.DSL.Expression (Exp)

import qualified LLVM.Extra.Arithmetic as A
import qualified LLVM.Core as LLVM
import qualified Type.Data.Num.Decimal as TypeNum

import qualified Synthesizer.Causal.Class         as CausalClass
import qualified Synthesizer.Generic.Cut          as CutG
import qualified Synthesizer.Storable.Signal      as SigSt
import qualified Data.StorableVector.Lazy.Pattern as SVP
import qualified Data.StorableVector.Lazy         as SVL

import qualified Synthesizer.Plain.Filter.Recursive.Universal as UniFilter

import qualified Control.Monad.HT as M
import Control.Arrow ((<<<), (^<<), (<<^), (&&&), (***), arr, first, second)
import Control.Category (id)
import Control.Applicative (liftA2, liftA3)

import qualified Data.Traversable as Trav
import Data.Traversable (traverse)
import Data.Semigroup ((<>))

import Data.Tuple.HT (fst3, snd3, thd3)

import qualified Numeric.NonNegative.Chunky as NonNegChunky

import qualified Algebra.Additive as Additive

import NumericPrelude.Numeric (zero, one, round, (^?), (+), (-), (*))
import Prelude hiding (Real, round, break, id, (+), (-), (*))



frequencyControl ::
   (MultiValue.Field a, MultiValue.RationalConstant a) =>
   SampleRate (Exp a) ->
   Sig.T (Const.T (MultiValue.T a)) ->
   Sig.T (Const.T (MultiValue.T a))
frequencyControl :: forall a.
(Field a, RationalConstant a) =>
SampleRate (Exp a) -> T (T (T a)) -> T (T (T a))
frequencyControl SampleRate (Exp a)
sr T (T (T a))
xs = (Exp a -> Exp a) -> T (T (T a)) (T (T a))
forall a am b bm.
(Aggregate a am, Aggregate b bm) =>
(a -> b) -> T (T am) (T bm)
Const.causalMap (SampleRate (Exp a) -> Exp a -> Exp a
forall a. C a => SampleRate a -> a -> a
frequency SampleRate (Exp a)
sr) T (T (T a)) (T (T a))
-> SignalOf T (T (T a)) -> SignalOf T (T (T a))
forall (process :: * -> * -> *) a b.
C process =>
process a b -> SignalOf process a -> SignalOf process b
$* SignalOf T (T (T a))
T (T (T a))
xs

data FrequencyControl a

instance
   (a ~ Exp b, MultiValue.Field b, MultiValue.RationalConstant b) =>
      Input (FrequencyControl b) a where
   data InputArg (FrequencyControl b) a =
         FrequencyControl (Sig.T (Const.T (MultiValue.T b)))
   type InputSource (FrequencyControl b) a =
         Sig.T (Const.T (MultiValue.T b))
   evalInput :: SampleRate a
-> InputSource (FrequencyControl b) a
-> InputArg (FrequencyControl b) a
evalInput SampleRate a
sampleRate =
      T (T (T b)) -> InputArg (FrequencyControl b) a
forall b a. T (T (T b)) -> InputArg (FrequencyControl b) a
FrequencyControl (T (T (T b)) -> InputArg (FrequencyControl b) a)
-> (T (T (T b)) -> T (T (T b)))
-> T (T (T b))
-> InputArg (FrequencyControl b) a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. SampleRate (Exp b) -> T (T (T b)) -> T (T (T b))
forall a.
(Field a, RationalConstant a) =>
SampleRate (Exp a) -> T (T (T a)) -> T (T (T a))
frequencyControl SampleRate a
SampleRate (Exp b)
sampleRate


modulation ::
   (MultiValue.Field a, MultiValue.RationalConstant a) =>
   SampleRate (Exp a) ->
   (Sig.T (Const.T (MultiValue.T (BM.T a))), Exp a) ->
   Sig.T (Const.T (BM.T (MultiValue.T a)))
modulation :: forall a.
(Field a, RationalConstant a) =>
SampleRate (Exp a) -> (T (T (T (T a))), Exp a) -> T (T (T (T a)))
modulation SampleRate (Exp a)
sr (T (T (T (T a)))
fm,Exp a
freq) =
   SampleRate (Exp a) -> Exp a -> T (T (T (T a))) -> T (T (T (T a)))
forall a am.
(C a, Aggregate a am) =>
SampleRate a -> a -> T (T (T am)) -> T (T (T am))
transposeModulation SampleRate (Exp a)
sr Exp a
freq ((T (T a) -> T (T a)) -> T (T (T a)) -> T (T (T a))
forall a b. (a -> b) -> T a -> T b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap T (T a) -> T (T a)
forall a. T (T a) -> T (T a)
BM.unMultiValue (T (T (T a)) -> T (T (T a))) -> T (T (T (T a))) -> T (T (T (T a)))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> T (T (T (T a)))
fm)

data Modulation a

instance
   (a ~ Exp b, MultiValue.Field b, MultiValue.RationalConstant b) =>
      Input (Modulation b) a where
   data InputArg (Modulation b) a =
         Modulation (Sig.T (Const.T (BM.T (MultiValue.T b))))
   type InputSource (Modulation b) a =
         (Sig.T (Const.T (MultiValue.T (BM.T b))), Exp b)
   evalInput :: SampleRate a
-> InputSource (Modulation b) a -> InputArg (Modulation b) a
evalInput SampleRate a
sampleRate (T (T (T (T b)))
fm,Exp b
freq) =
      T (T (T (T b))) -> InputArg (Modulation b) a
forall b a. T (T (T (T b))) -> InputArg (Modulation b) a
Modulation (T (T (T (T b))) -> InputArg (Modulation b) a)
-> T (T (T (T b))) -> InputArg (Modulation b) a
forall a b. (a -> b) -> a -> b
$ SampleRate (Exp b) -> (T (T (T (T b))), Exp b) -> T (T (T (T b)))
forall a.
(Field a, RationalConstant a) =>
SampleRate (Exp a) -> (T (T (T (T a))), Exp a) -> T (T (T (T a)))
modulation SampleRate a
SampleRate (Exp b)
sampleRate (T (T (T (T b)))
fm,Exp b
freq)


detuneModulation ::
   (MultiValue.Field a, MultiValue.RationalConstant a) =>
   SampleRate (Exp a) ->
   (b, Sig.T (Const.T (MultiValue.T (BM.T a))), Exp a) ->
   (b, Sig.T (Const.T (BM.T (MultiValue.T a))))
detuneModulation :: forall a b.
(Field a, RationalConstant a) =>
SampleRate (Exp a)
-> (b, T (T (T (T a))), Exp a) -> (b, T (T (T (T a))))
detuneModulation SampleRate (Exp a)
sr (b
det,T (T (T (T a)))
fm,Exp a
freq) =
   (b
det, SampleRate (Exp a) -> Exp a -> T (T (T (T a))) -> T (T (T (T a)))
forall a am.
(C a, Aggregate a am) =>
SampleRate a -> a -> T (T (T am)) -> T (T (T am))
transposeModulation SampleRate (Exp a)
sr Exp a
freq ((T (T a) -> T (T a)) -> T (T (T a)) -> T (T (T a))
forall a b. (a -> b) -> T a -> T b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap T (T a) -> T (T a)
forall a. T (T a) -> T (T a)
BM.unMultiValue (T (T (T a)) -> T (T (T a))) -> T (T (T (T a))) -> T (T (T (T a)))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> T (T (T (T a)))
fm))

data DetuneModulation a

instance
   (a ~ Exp b, MultiValue.Field b, MultiValue.RationalConstant b) =>
      Input (DetuneModulation b) a where
   data InputArg (DetuneModulation b) a =
         DetuneModulation
            (Sig.T (Const.T (MultiValue.T b)),
             Sig.T (Const.T (BM.T (MultiValue.T b))))
   type InputSource (DetuneModulation b) a =
         (Sig.T (Const.T (MultiValue.T b)),
          Sig.T (Const.T (MultiValue.T (BM.T b))),
          Exp b)
   evalInput :: SampleRate a
-> InputSource (DetuneModulation b) a
-> InputArg (DetuneModulation b) a
evalInput SampleRate a
sampleRate (T (T (T b))
det,T (T (T (T b)))
fm,Exp b
freq) =
      (T (T (T b)), T (T (T (T b)))) -> InputArg (DetuneModulation b) a
forall b a.
(T (T (T b)), T (T (T (T b)))) -> InputArg (DetuneModulation b) a
DetuneModulation ((T (T (T b)), T (T (T (T b)))) -> InputArg (DetuneModulation b) a)
-> (T (T (T b)), T (T (T (T b))))
-> InputArg (DetuneModulation b) a
forall a b. (a -> b) -> a -> b
$ SampleRate (Exp b)
-> (T (T (T b)), T (T (T (T b))), Exp b)
-> (T (T (T b)), T (T (T (T b))))
forall a b.
(Field a, RationalConstant a) =>
SampleRate (Exp a)
-> (b, T (T (T (T a))), Exp a) -> (b, T (T (T (T a))))
detuneModulation SampleRate a
SampleRate (Exp b)
sampleRate (T (T (T b))
det,T (T (T (T b)))
fm,Exp b
freq)


type RealValue = MultiValue.T Real

frequencyFromBendModulation ::
   Exp Real ->
   Sig.T (Const.T (BM.T RealValue)) ->
   Sig.T VectorValue
frequencyFromBendModulation :: Exp Real -> T (T (T RealValue)) -> T (Serial VectorSize Real)
frequencyFromBendModulation Exp Real
speed T (T (T RealValue))
fmFreq =
   Exp Real -> T (T RealValue) (Serial 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 RealValue) (Serial VectorSize Real)
-> SignalOf T (T RealValue) -> SignalOf T (Serial VectorSize Real)
forall (process :: * -> * -> *) a b.
C process =>
process a b -> SignalOf process a -> SignalOf process b
$* T (T (T RealValue)) -> T (T RealValue)
forall a. C a => T (T a) -> T a
piecewiseConstant T (T (T RealValue))
fmFreq

stereoFrequenciesFromDetuneBendModulation ::
   Exp Real ->
   (Sig.T (Const.T RealValue), Sig.T (Const.T (BM.T RealValue))) ->
   Sig.T (Stereo.T VectorValue)
stereoFrequenciesFromDetuneBendModulation :: Exp Real
-> (T (T RealValue), T (T (T RealValue)))
-> T (T (Serial VectorSize Real))
stereoFrequenciesFromDetuneBendModulation Exp Real
speed (T (T RealValue)
det,T (T (T RealValue))
fm) =
   (T (Serial VectorSize Real, T (Serial VectorSize Real))
  (T (Serial VectorSize Real))
forall a. PseudoRing a => T (a, T a) (T a)
Causal.envelopeStereo T (Serial VectorSize Real, T (Serial VectorSize Real))
  (T (Serial VectorSize Real))
-> SignalOf T (Serial VectorSize Real)
-> T (T (Serial VectorSize Real)) (T (Serial VectorSize Real))
forall (process :: * -> * -> *) a b c.
C process =>
process (a, b) c -> SignalOf process a -> process b c
$< Exp Real -> T (T (T RealValue)) -> T (Serial VectorSize Real)
frequencyFromBendModulation Exp Real
speed T (T (T RealValue))
fm)
   T (T (Serial VectorSize Real)) (T (Serial VectorSize Real))
-> T (Serial VectorSize Real) (T (Serial VectorSize Real))
-> T (Serial VectorSize Real) (T (Serial VectorSize Real))
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
<<<
   (Serial VectorSize Real
 -> Serial VectorSize Real -> T (Serial VectorSize Real))
-> T (Serial VectorSize Real) (Serial VectorSize Real)
-> T (Serial VectorSize Real) (Serial VectorSize Real)
-> T (Serial VectorSize Real) (T (Serial VectorSize Real))
forall a b c.
(a -> b -> c)
-> T (Serial VectorSize Real) a
-> T (Serial VectorSize Real) b
-> T (Serial VectorSize Real) c
forall (f :: * -> *) a b c.
Applicative f =>
(a -> b -> c) -> f a -> f b -> f c
liftA2 Serial VectorSize Real
-> Serial VectorSize Real -> T (Serial VectorSize Real)
forall a. a -> a -> T a
Stereo.cons (T (Serial VectorSize Real) (Serial VectorSize Real)
forall a. C a => a
one T (Serial VectorSize Real) (Serial VectorSize Real)
-> T (Serial VectorSize Real) (Serial VectorSize Real)
-> T (Serial VectorSize Real) (Serial VectorSize Real)
forall a. C a => a -> a -> a
+ T (Serial VectorSize Real) (Serial VectorSize Real)
forall a. T a a
forall {k} (cat :: k -> k -> *) (a :: k). Category cat => cat a a
id) (T (Serial VectorSize Real) (Serial VectorSize Real)
forall a. C a => a
one T (Serial VectorSize Real) (Serial VectorSize Real)
-> T (Serial VectorSize Real) (Serial VectorSize Real)
-> T (Serial VectorSize Real) (Serial VectorSize Real)
forall a. C a => a -> a -> a
- T (Serial VectorSize Real) (Serial VectorSize Real)
forall a. T a a
forall {k} (cat :: k -> k -> *) (a :: k). Category cat => cat a a
id)
   T (Serial VectorSize Real) (T (Serial VectorSize Real))
-> SignalOf T (Serial VectorSize Real)
-> SignalOf T (T (Serial VectorSize Real))
forall (process :: * -> * -> *) a b.
C process =>
process a b -> SignalOf process a -> SignalOf process b
$* T (T RealValue) -> T (Serial VectorSize Real)
piecewiseConstantVector T (T RealValue)
det

piecewiseConstantVector :: Sig.T (Const.T RealValue) -> Sig.T VectorValue
piecewiseConstantVector :: T (T RealValue) -> T (Serial VectorSize Real)
piecewiseConstantVector T (T RealValue)
xs =
   T (T (Serial VectorSize Real)) -> T (Serial VectorSize Real)
forall a. C a => T (T a) -> T a
piecewiseConstant ((Exp Real -> Exp (T VectorSize Real))
-> T (T RealValue) (T (Serial VectorSize Real))
forall a am b bm.
(Aggregate a am, Aggregate b bm) =>
(a -> b) -> T (T am) (T bm)
Const.causalMap Exp Real -> Exp (T VectorSize Real)
forall n a. (Positive n, C a) => Exp a -> Exp (T n a)
Serial.upsample T (T RealValue) (T (Serial VectorSize Real))
-> SignalOf T (T RealValue)
-> SignalOf T (T (Serial VectorSize Real))
forall (process :: * -> * -> *) a b.
C process =>
process a b -> SignalOf process a -> SignalOf process b
$* SignalOf T (T RealValue)
T (T RealValue)
xs)

pingReleaseEnvelope ::
   IO (Real -> Real ->
       SigSt.ChunkSize ->
       SampleRate Real -> Real -> Ev.LazyTime -> SigSt.T Vector)
pingReleaseEnvelope :: IO
  (Real
   -> Real
   -> ChunkSize
   -> SampleRate Real
   -> Real
   -> LazyTime
   -> Vector (T VectorSize Real))
pingReleaseEnvelope =
   ((SampleRate Real
  -> Real -> Real -> T LazySize (Vector (T VectorSize Real)))
 -> (ChunkSize
     -> SampleRate Real -> Real -> Real -> Vector (T VectorSize Real))
 -> Real
 -> Real
 -> ChunkSize
 -> SampleRate Real
 -> Real
 -> LazyTime
 -> Vector (T VectorSize Real))
-> IO
     (SampleRate Real
      -> Real -> Real -> T LazySize (Vector (T VectorSize Real)))
-> IO
     (ChunkSize
      -> SampleRate Real -> Real -> Real -> Vector (T VectorSize Real))
-> IO
     (Real
      -> Real
      -> ChunkSize
      -> SampleRate Real
      -> Real
      -> LazyTime
      -> Vector (T VectorSize Real))
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 (Vector (T VectorSize Real))
pressed ChunkSize
-> SampleRate Real -> Real -> Real -> Vector (T VectorSize Real)
release Real
decay Real
rel ChunkSize
vcsize SampleRate Real
sr Real
vel LazyTime
dur ->
         Vector (T VectorSize Real)
-> (Real -> Vector (T VectorSize Real))
-> Vector (T VectorSize Real)
forall n a.
(Positive n, Vector a) =>
Vector (T n a) -> (a -> Vector (T n a)) -> Vector (T n a)
SigStL.continuePacked
            (T LazySize (Vector (T VectorSize Real))
-> LazyTime -> Vector (T VectorSize Real)
forall b.
Storable b =>
T LazySize (Vector b) -> LazyTime -> Vector b
pioApplyToLazyTime (SampleRate Real
-> Real -> Real -> T LazySize (Vector (T VectorSize Real))
pressed SampleRate Real
sr Real
decay Real
vel) LazyTime
dur)
            (\Real
x -> ChunkSize
-> SampleRate Real -> Real -> Real -> Vector (T VectorSize Real)
release ChunkSize
vcsize SampleRate Real
sr Real
rel Real
x))
      (DSL
  (SampleRate Real
   -> Real -> Real -> T LazySize (Vector (T VectorSize Real)))
  (Element
     (In
        (SampleRate Real
         -> Real -> Real -> T LazySize (Vector (T VectorSize Real)))))
  (Element
     (Out
        (SampleRate Real
         -> Real -> Real -> T LazySize (Vector (T VectorSize Real)))))
-> IO
     (SampleRate Real
      -> Real -> Real -> T LazySize (Vector (T VectorSize Real)))
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 (Vector (T VectorSize Real)))
   (Element
      (In
         (SampleRate Real
          -> Real -> Real -> T LazySize (Vector (T VectorSize Real)))))
   (Element
      (Out
         (SampleRate Real
          -> Real -> Real -> T LazySize (Vector (T VectorSize Real)))))
 -> IO
      (SampleRate Real
       -> Real -> Real -> T LazySize (Vector (T VectorSize Real))))
-> DSL
     (SampleRate Real
      -> Real -> Real -> T LazySize (Vector (T VectorSize Real)))
     (Element
        (In
           (SampleRate Real
            -> Real -> Real -> T LazySize (Vector (T VectorSize Real)))))
     (Element
        (Out
           (SampleRate Real
            -> Real -> Real -> T LazySize (Vector (T VectorSize Real)))))
-> IO
     (SampleRate Real
      -> Real -> Real -> T LazySize (Vector (T VectorSize Real)))
forall a b. (a -> b) -> a -> b
$
       (Arg Time (Exp Real)
 -> Arg Number (Exp Real)
 -> SampleRate (Exp Real)
 -> T () (Serial VectorSize Real))
-> SampleRate (Exp Real)
-> Unwrapped
     (Arg Time (Exp Real)
      -> Arg Number (Exp Real)
      -> SampleRate (Exp Real)
      -> T () (Serial 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 () (Serial VectorSize Real))
 -> SampleRate (Exp Real)
 -> Unwrapped
      (Arg Time (Exp Real)
       -> Arg Number (Exp Real)
       -> SampleRate (Exp Real)
       -> T () (Serial VectorSize Real)))
-> (Arg Time (Exp Real)
    -> Arg Number (Exp Real)
    -> SampleRate (Exp Real)
    -> T () (Serial VectorSize Real))
-> SampleRate (Exp Real)
-> Unwrapped
     (Arg Time (Exp Real)
      -> Arg Number (Exp Real)
      -> SampleRate (Exp Real)
      -> T () (Serial VectorSize Real))
forall a b. (a -> b) -> a -> b
$ \(Time Exp Real
decay) (Number Exp Real
velocity) (SampleRate Exp Real
_sr) ->
       SignalOf T (Serial VectorSize Real)
-> T () (Serial 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 (Serial VectorSize Real)
forall n a.
(Vector n a, Transcendental a, RationalConstant a) =>
Exp a -> Exp a -> T (Serial n a)
SigPS.exponential2 Exp Real
decay (Exp Real -> Exp Real
forall a. C a => a -> a
amplitudeFromVelocity Exp Real
velocity)))
      (DSL (SampleRate Real -> Real -> Real -> Vector (T VectorSize Real))
-> IO
     (Shape
        (SampleRate Real -> Real -> Real -> Vector (T VectorSize Real))
      -> SampleRate Real -> Real -> Real -> Vector (T VectorSize Real))
forall f. Run f => DSL f -> IO (Shape f -> f)
Render.run (DSL
   (SampleRate Real -> Real -> Real -> Vector (T VectorSize Real))
 -> IO
      (Shape
         (SampleRate Real -> Real -> Real -> Vector (T VectorSize Real))
       -> SampleRate Real -> Real -> Real -> Vector (T VectorSize Real)))
-> DSL
     (SampleRate Real -> Real -> Real -> Vector (T VectorSize Real))
-> IO
     (Shape
        (SampleRate Real -> Real -> Real -> Vector (T VectorSize Real))
      -> SampleRate Real -> Real -> Real -> Vector (T VectorSize Real))
forall a b. (a -> b) -> a -> b
$
       (Arg Time (Exp Real)
 -> Arg Number (Exp Real)
 -> SampleRate (Exp Real)
 -> T (Serial VectorSize Real))
-> SampleRate (Exp Real)
-> Unwrapped
     (Arg Time (Exp Real)
      -> Arg Number (Exp Real)
      -> SampleRate (Exp Real)
      -> T (Serial 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 (Serial VectorSize Real))
 -> SampleRate (Exp Real)
 -> Unwrapped
      (Arg Time (Exp Real)
       -> Arg Number (Exp Real)
       -> SampleRate (Exp Real)
       -> T (Serial VectorSize Real)))
-> (Arg Time (Exp Real)
    -> Arg Number (Exp Real)
    -> SampleRate (Exp Real)
    -> T (Serial VectorSize Real))
-> SampleRate (Exp Real)
-> Unwrapped
     (Arg Time (Exp Real)
      -> Arg Number (Exp Real)
      -> SampleRate (Exp Real)
      -> T (Serial VectorSize Real))
forall a b. (a -> b) -> a -> b
$ \(Time Exp Real
releaseHL) (Number Exp Real
amplitude) (SampleRate Exp Real
_sr) ->
       let releaseTime :: Exp Real
releaseTime = Exp Real
releaseHL Exp Real -> Exp Real -> Exp Real
forall a. C a => a -> a -> a
* Exp Real
5 Exp Real -> Exp Real -> Exp Real
forall a. Fractional a => a -> a -> a
/ Int -> Exp Real
forall a b. (Integral a, Num b) => a -> b
fromIntegral Int
vectorSize
       in Exp Word -> T (Serial VectorSize Real) (Serial 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
releaseTime) T (Serial VectorSize Real) (Serial VectorSize Real)
-> SignalOf T (Serial VectorSize Real)
-> SignalOf T (Serial VectorSize Real)
forall (process :: * -> * -> *) a b.
C process =>
process a b -> SignalOf process a -> SignalOf process b
$*
          Exp Real -> Exp Real -> T (Serial 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
amplitude)

pingRelease ::
   IO (Real -> Real -> SigSt.ChunkSize -> Instrument Real Vector)
pingRelease :: IO
  (Real -> Real -> ChunkSize -> Instrument Real (T VectorSize Real))
pingRelease =
   ((SampleRate Real
  -> Real
  -> T (Vector (T VectorSize Real)) (Vector (T VectorSize Real)))
 -> (Real
     -> Real
     -> ChunkSize
     -> SampleRate Real
     -> Real
     -> LazyTime
     -> Vector (T VectorSize Real))
 -> Real
 -> Real
 -> ChunkSize
 -> Instrument Real (T VectorSize Real))
-> IO
     (SampleRate Real
      -> Real
      -> T (Vector (T VectorSize Real)) (Vector (T VectorSize Real)))
-> IO
     (Real
      -> Real
      -> ChunkSize
      -> SampleRate Real
      -> Real
      -> LazyTime
      -> Vector (T VectorSize Real))
-> IO
     (Real -> Real -> ChunkSize -> Instrument Real (T VectorSize Real))
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 (Vector (T VectorSize Real)) (Vector (T VectorSize Real))
osc Real
-> Real
-> ChunkSize
-> SampleRate Real
-> Real
-> LazyTime
-> Vector (T VectorSize Real)
env Real
dec Real
rel ChunkSize
vcsize SampleRate Real
sr Real
vel Real
freq LazyTime
dur ->
         T (Vector (T VectorSize Real)) (Vector (T VectorSize Real))
-> Vector (T VectorSize Real) -> Vector (T VectorSize Real)
forall a b.
(Storable a, Storable b) =>
T (Vector a) (Vector b) -> Vector a -> Vector b
pioApply (SampleRate Real
-> Real
-> T (Vector (T VectorSize Real)) (Vector (T VectorSize Real))
osc SampleRate Real
sr Real
freq) (Real
-> Real
-> ChunkSize
-> SampleRate Real
-> Real
-> LazyTime
-> Vector (T VectorSize Real)
env Real
dec Real
rel ChunkSize
vcsize SampleRate Real
sr Real
vel LazyTime
dur))
      (DSL
  (SampleRate Real
   -> Real
   -> T (Vector (T VectorSize Real)) (Vector (T VectorSize Real)))
  (Element
     (In
        (SampleRate Real
         -> Real
         -> T (Vector (T VectorSize Real)) (Vector (T VectorSize Real)))))
  (Element
     (Out
        (SampleRate Real
         -> Real
         -> T (Vector (T VectorSize Real)) (Vector (T VectorSize Real)))))
-> IO
     (SampleRate Real
      -> Real
      -> T (Vector (T VectorSize Real)) (Vector (T VectorSize Real)))
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 (Vector (T VectorSize Real)) (Vector (T VectorSize Real)))
   (Element
      (In
         (SampleRate Real
          -> Real
          -> T (Vector (T VectorSize Real)) (Vector (T VectorSize Real)))))
   (Element
      (Out
         (SampleRate Real
          -> Real
          -> T (Vector (T VectorSize Real)) (Vector (T VectorSize Real)))))
 -> IO
      (SampleRate Real
       -> Real
       -> T (Vector (T VectorSize Real)) (Vector (T VectorSize Real))))
-> DSL
     (SampleRate Real
      -> Real
      -> T (Vector (T VectorSize Real)) (Vector (T VectorSize Real)))
     (Element
        (In
           (SampleRate Real
            -> Real
            -> T (Vector (T VectorSize Real)) (Vector (T VectorSize Real)))))
     (Element
        (Out
           (SampleRate Real
            -> Real
            -> T (Vector (T VectorSize Real)) (Vector (T VectorSize Real)))))
-> IO
     (SampleRate Real
      -> Real
      -> T (Vector (T VectorSize Real)) (Vector (T VectorSize Real)))
forall a b. (a -> b) -> a -> b
$ (Arg Frequency (Exp Real)
 -> SampleRate (Exp Real)
 -> T (Serial VectorSize Real) (Serial VectorSize Real))
-> SampleRate (Exp Real)
-> Unwrapped
     (Arg Frequency (Exp Real)
      -> SampleRate (Exp Real)
      -> T (Serial VectorSize Real) (Serial VectorSize Real))
forall a f. Wrapped a f => f -> SampleRate a -> Unwrapped f
wrapped ((Arg Frequency (Exp Real)
  -> SampleRate (Exp Real)
  -> T (Serial VectorSize Real) (Serial VectorSize Real))
 -> SampleRate (Exp Real)
 -> Unwrapped
      (Arg Frequency (Exp Real)
       -> SampleRate (Exp Real)
       -> T (Serial VectorSize Real) (Serial VectorSize Real)))
-> (Arg Frequency (Exp Real)
    -> SampleRate (Exp Real)
    -> T (Serial VectorSize Real) (Serial VectorSize Real))
-> SampleRate (Exp Real)
-> Unwrapped
     (Arg Frequency (Exp Real)
      -> SampleRate (Exp Real)
      -> T (Serial VectorSize Real) (Serial VectorSize Real))
forall a b. (a -> b) -> a -> b
$ \(Frequency Exp Real
freq) (SampleRate Exp Real
_sr) ->
         T (Serial VectorSize Real, Serial VectorSize Real)
  (Serial VectorSize Real)
forall a. PseudoRing a => T (a, a) a
Causal.envelope T (Serial VectorSize Real, Serial VectorSize Real)
  (Serial VectorSize Real)
-> SignalOf T (Serial VectorSize Real)
-> T (Serial VectorSize Real) (Serial VectorSize Real)
forall (process :: * -> * -> *) a b c.
C process =>
process (a, b) c -> SignalOf process b -> process a c
$> (forall r.
 Serial VectorSize Real
 -> CodeGenFunction r (Serial VectorSize Real))
-> Exp Real -> Exp Real -> T (Serial 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 Serial VectorSize Real
-> CodeGenFunction r (Serial VectorSize Real)
forall r.
Serial VectorSize Real
-> CodeGenFunction r (Serial 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
   -> ChunkSize
   -> SampleRate Real
   -> Real
   -> LazyTime
   -> Vector (T VectorSize Real))
pingReleaseEnvelope

pingStereoRelease ::
   IO (Real -> Real -> SigSt.ChunkSize -> Instrument Real (Stereo.T Vector))
pingStereoRelease :: IO
  (Real
   -> Real -> ChunkSize -> Instrument Real (T (T VectorSize Real)))
pingStereoRelease =
   ((SampleRate Real
  -> Real
  -> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real))))
 -> (Real
     -> Real
     -> ChunkSize
     -> SampleRate Real
     -> Real
     -> LazyTime
     -> Vector (T VectorSize Real))
 -> Real
 -> Real
 -> ChunkSize
 -> Instrument Real (T (T VectorSize Real)))
-> IO
     (SampleRate Real
      -> Real
      -> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real))))
-> IO
     (Real
      -> Real
      -> ChunkSize
      -> SampleRate Real
      -> Real
      -> LazyTime
      -> Vector (T VectorSize Real))
-> IO
     (Real
      -> Real -> ChunkSize -> Instrument Real (T (T VectorSize Real)))
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 (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real)))
osc Real
-> Real
-> ChunkSize
-> SampleRate Real
-> Real
-> LazyTime
-> Vector (T VectorSize Real)
env Real
dec Real
rel ChunkSize
vcsize SampleRate Real
sr Real
vel Real
freq LazyTime
dur ->
         T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real)))
-> Vector (T VectorSize Real) -> T (T (T VectorSize Real))
forall a b.
(Storable a, Storable b) =>
T (Vector a) (Vector b) -> Vector a -> Vector b
pioApply (SampleRate Real
-> Real
-> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real)))
osc SampleRate Real
sr Real
freq) (Real
-> Real
-> ChunkSize
-> SampleRate Real
-> Real
-> LazyTime
-> Vector (T VectorSize Real)
env Real
dec Real
rel ChunkSize
vcsize SampleRate Real
sr Real
vel LazyTime
dur))
      (DSL
  (SampleRate Real
   -> Real
   -> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real))))
  (Element
     (In
        (SampleRate Real
         -> Real
         -> T (Vector (T VectorSize Real))
              (Vector (T (T VectorSize Real))))))
  (Element
     (Out
        (SampleRate Real
         -> Real
         -> T (Vector (T VectorSize Real))
              (Vector (T (T VectorSize Real))))))
-> IO
     (SampleRate Real
      -> Real
      -> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real))))
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 (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real))))
   (Element
      (In
         (SampleRate Real
          -> Real
          -> T (Vector (T VectorSize Real))
               (Vector (T (T VectorSize Real))))))
   (Element
      (Out
         (SampleRate Real
          -> Real
          -> T (Vector (T VectorSize Real))
               (Vector (T (T VectorSize Real))))))
 -> IO
      (SampleRate Real
       -> Real
       -> T (Vector (T VectorSize Real))
            (Vector (T (T VectorSize Real)))))
-> DSL
     (SampleRate Real
      -> Real
      -> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real))))
     (Element
        (In
           (SampleRate Real
            -> Real
            -> T (Vector (T VectorSize Real))
                 (Vector (T (T VectorSize Real))))))
     (Element
        (Out
           (SampleRate Real
            -> Real
            -> T (Vector (T VectorSize Real))
                 (Vector (T (T VectorSize Real))))))
-> IO
     (SampleRate Real
      -> Real
      -> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real))))
forall a b. (a -> b) -> a -> b
$ (Arg Frequency (Exp Real)
 -> SampleRate (Exp Real)
 -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
-> SampleRate (Exp Real)
-> Unwrapped
     (Arg Frequency (Exp Real)
      -> SampleRate (Exp Real)
      -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
forall a f. Wrapped a f => f -> SampleRate a -> Unwrapped f
wrapped ((Arg Frequency (Exp Real)
  -> SampleRate (Exp Real)
  -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
 -> SampleRate (Exp Real)
 -> Unwrapped
      (Arg Frequency (Exp Real)
       -> SampleRate (Exp Real)
       -> T (Serial VectorSize Real) (T (T (T VectorSize Real)))))
-> (Arg Frequency (Exp Real)
    -> SampleRate (Exp Real)
    -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
-> SampleRate (Exp Real)
-> Unwrapped
     (Arg Frequency (Exp Real)
      -> SampleRate (Exp Real)
      -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
forall a b. (a -> b) -> a -> b
$ \(Frequency Exp Real
freq) (SampleRate Exp Real
_sr) ->
         T (Serial VectorSize Real) -> T (T (T VectorSize Real))
forall a. T (T a) -> T (T a)
Stereo.multiValue (T (Serial VectorSize Real) -> T (T (T VectorSize Real)))
-> T (Serial VectorSize Real, T (Serial VectorSize Real))
     (T (Serial VectorSize Real))
-> T (Serial VectorSize Real, T (Serial VectorSize Real))
     (T (T (T VectorSize Real)))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$>
         T (Serial VectorSize Real, T (Serial VectorSize Real))
  (T (Serial VectorSize Real))
forall a. PseudoRing a => T (a, T a) (T a)
Causal.envelopeStereo T (Serial VectorSize Real, T (Serial VectorSize Real))
  (T (T (T VectorSize Real)))
-> SignalOf T (T (Serial VectorSize Real))
-> T (Serial VectorSize Real) (T (T (T VectorSize Real)))
forall (process :: * -> * -> *) a b c.
C process =>
process (a, b) c -> SignalOf process b -> process a c
$>
         (Serial VectorSize Real
 -> Serial VectorSize Real -> T (Serial VectorSize Real))
-> T (Serial VectorSize Real)
-> T (Serial VectorSize Real)
-> T (T (Serial VectorSize Real))
forall a b c. (a -> b -> c) -> T a -> T b -> T c
forall (f :: * -> *) a b c.
Applicative f =>
(a -> b -> c) -> f a -> f b -> f c
liftA2 Serial VectorSize Real
-> Serial VectorSize Real -> T (Serial VectorSize Real)
forall a. a -> a -> T a
Stereo.cons
            ((forall r.
 Serial VectorSize Real
 -> CodeGenFunction r (Serial VectorSize Real))
-> Exp Real -> Exp Real -> T (Serial 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 Serial VectorSize Real
-> CodeGenFunction r (Serial VectorSize Real)
forall r.
Serial VectorSize Real
-> CodeGenFunction r (Serial 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
0.999Exp Real -> Exp Real -> Exp Real
forall a. C a => a -> a -> a
*Exp Real
freq))
            ((forall r.
 Serial VectorSize Real
 -> CodeGenFunction r (Serial VectorSize Real))
-> Exp Real -> Exp Real -> T (Serial 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 Serial VectorSize Real
-> CodeGenFunction r (Serial VectorSize Real)
forall r.
Serial VectorSize Real
-> CodeGenFunction r (Serial 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
1.001Exp Real -> Exp Real -> Exp Real
forall a. C a => a -> a -> a
*Exp Real
freq)))
      IO
  (Real
   -> Real
   -> ChunkSize
   -> SampleRate Real
   -> Real
   -> LazyTime
   -> Vector (T VectorSize Real))
pingReleaseEnvelope

pingStereoReleaseFM ::
   IO (Real -> Real ->
       PC.T Real ->
       PC.T Real ->
       Real -> Real ->
       SigSt.ChunkSize ->
       PC.T (BM.T Real) ->
       Instrument Real (Stereo.T Vector))
pingStereoReleaseFM :: IO
  (Real
   -> Real
   -> T Real
   -> T Real
   -> Real
   -> Real
   -> ChunkSize
   -> T (T Real)
   -> Instrument Real (T (T VectorSize Real)))
pingStereoReleaseFM =
   ((SampleRate Real
  -> (Real, Real)
  -> T Real
  -> (T Real, T (T Real), Real)
  -> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real))))
 -> (Real
     -> Real
     -> ChunkSize
     -> SampleRate Real
     -> Real
     -> LazyTime
     -> Vector (T VectorSize Real))
 -> Real
 -> Real
 -> T Real
 -> T Real
 -> Real
 -> Real
 -> ChunkSize
 -> T (T Real)
 -> Instrument Real (T (T VectorSize Real)))
-> IO
     (SampleRate Real
      -> (Real, Real)
      -> T Real
      -> (T Real, T (T Real), Real)
      -> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real))))
-> IO
     (Real
      -> Real
      -> ChunkSize
      -> SampleRate Real
      -> Real
      -> LazyTime
      -> Vector (T VectorSize Real))
-> IO
     (Real
      -> Real
      -> T Real
      -> T Real
      -> Real
      -> Real
      -> ChunkSize
      -> T (T Real)
      -> Instrument Real (T (T VectorSize Real)))
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 Real
-> (T Real, T (T Real), Real)
-> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real)))
osc Real
-> Real
-> ChunkSize
-> SampleRate Real
-> Real
-> LazyTime
-> Vector (T VectorSize Real)
env Real
dec Real
rel T Real
detune T Real
shape Real
phase Real
phaseDecay ChunkSize
vcsize T (T Real)
fm
            SampleRate Real
sr Real
vel Real
freq LazyTime
dur ->
         T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real)))
-> Vector (T VectorSize Real) -> T (T (T VectorSize Real))
forall a b.
(Storable a, Storable b) =>
T (Vector a) (Vector b) -> Vector a -> Vector b
pioApply
            (SampleRate Real
-> (Real, Real)
-> T Real
-> (T Real, T (T Real), Real)
-> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real)))
osc SampleRate Real
sr (Real
phase, Real
phaseDecay) T Real
shape (T Real
detune, T (T Real)
fm, Real
freq))
            (Real
-> Real
-> ChunkSize
-> SampleRate Real
-> Real
-> LazyTime
-> Vector (T VectorSize Real)
env Real
dec Real
rel ChunkSize
vcsize SampleRate Real
sr Real
vel LazyTime
dur))
      (DSL
  (SampleRate Real
   -> (Real, Real)
   -> T Real
   -> (T Real, T (T Real), Real)
   -> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real))))
  (Element
     (In
        (SampleRate Real
         -> (Real, Real)
         -> T Real
         -> (T Real, T (T Real), Real)
         -> T (Vector (T VectorSize Real))
              (Vector (T (T VectorSize Real))))))
  (Element
     (Out
        (SampleRate Real
         -> (Real, Real)
         -> T Real
         -> (T Real, T (T Real), Real)
         -> T (Vector (T VectorSize Real))
              (Vector (T (T VectorSize Real))))))
-> IO
     (SampleRate Real
      -> (Real, Real)
      -> T Real
      -> (T Real, T (T Real), Real)
      -> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real))))
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 Real
    -> (T Real, T (T Real), Real)
    -> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real))))
   (Element
      (In
         (SampleRate Real
          -> (Real, Real)
          -> T Real
          -> (T Real, T (T Real), Real)
          -> T (Vector (T VectorSize Real))
               (Vector (T (T VectorSize Real))))))
   (Element
      (Out
         (SampleRate Real
          -> (Real, Real)
          -> T Real
          -> (T Real, T (T Real), Real)
          -> T (Vector (T VectorSize Real))
               (Vector (T (T VectorSize Real))))))
 -> IO
      (SampleRate Real
       -> (Real, Real)
       -> T Real
       -> (T Real, T (T Real), Real)
       -> T (Vector (T VectorSize Real))
            (Vector (T (T VectorSize Real)))))
-> DSL
     (SampleRate Real
      -> (Real, Real)
      -> T Real
      -> (T Real, T (T Real), Real)
      -> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real))))
     (Element
        (In
           (SampleRate Real
            -> (Real, Real)
            -> T Real
            -> (T Real, T (T Real), Real)
            -> T (Vector (T VectorSize Real))
                 (Vector (T (T VectorSize Real))))))
     (Element
        (Out
           (SampleRate Real
            -> (Real, Real)
            -> T Real
            -> (T Real, T (T Real), Real)
            -> T (Vector (T VectorSize Real))
                 (Vector (T (T VectorSize Real))))))
-> IO
     (SampleRate Real
      -> (Real, Real)
      -> T Real
      -> (T Real, T (T Real), Real)
      -> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real))))
forall a b. (a -> b) -> a -> b
$
       ((Arg Number (Exp Real), Arg Time (Exp Real))
 -> InputArg (Control (T RealValue)) (Exp Real)
 -> InputArg (DetuneModulation Real) (Exp Real)
 -> SampleRate (Exp Real)
 -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
-> SampleRate (Exp Real)
-> Unwrapped
     ((Arg Number (Exp Real), Arg Time (Exp Real))
      -> InputArg (Control (T RealValue)) (Exp Real)
      -> InputArg (DetuneModulation Real) (Exp Real)
      -> SampleRate (Exp Real)
      -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
forall a f. Wrapped a f => f -> SampleRate a -> Unwrapped f
wrapped (((Arg Number (Exp Real), Arg Time (Exp Real))
  -> InputArg (Control (T RealValue)) (Exp Real)
  -> InputArg (DetuneModulation Real) (Exp Real)
  -> SampleRate (Exp Real)
  -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
 -> SampleRate (Exp Real)
 -> Unwrapped
      ((Arg Number (Exp Real), Arg Time (Exp Real))
       -> InputArg (Control (T RealValue)) (Exp Real)
       -> InputArg (DetuneModulation Real) (Exp Real)
       -> SampleRate (Exp Real)
       -> T (Serial VectorSize Real) (T (T (T VectorSize Real)))))
-> ((Arg Number (Exp Real), Arg Time (Exp Real))
    -> InputArg (Control (T RealValue)) (Exp Real)
    -> InputArg (DetuneModulation Real) (Exp Real)
    -> SampleRate (Exp Real)
    -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
-> SampleRate (Exp Real)
-> Unwrapped
     ((Arg Number (Exp Real), Arg Time (Exp Real))
      -> InputArg (Control (T RealValue)) (Exp Real)
      -> InputArg (DetuneModulation Real) (Exp Real)
      -> SampleRate (Exp Real)
      -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
forall a b. (a -> b) -> a -> b
$
         \(Number Exp Real
phase, Time Exp Real
decay) (Control T (T RealValue)
shape) (DetuneModulation (T (T RealValue), T (T (T RealValue)))
fm) ->
       (SampleRate (Exp Real) -> Exp Real -> Exp Real)
-> Exp Real
-> (Exp Real
    -> SampleRate (Exp Real)
    -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
-> SampleRate (Exp Real)
-> T (Serial VectorSize 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 (Serial VectorSize Real) (T (T (T VectorSize Real))))
 -> SampleRate (Exp Real)
 -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
-> (Exp Real
    -> SampleRate (Exp Real)
    -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
-> SampleRate (Exp Real)
-> T (Serial VectorSize Real) (T (T (T VectorSize Real)))
forall a b. (a -> b) -> a -> b
$ \Exp Real
speed SampleRate (Exp Real)
_sr ->
         T (Serial VectorSize Real) -> T (T (T VectorSize Real))
forall a. T (T a) -> T (T a)
Stereo.multiValue (T (Serial VectorSize Real) -> T (T (T VectorSize Real)))
-> T (Serial VectorSize Real, T (Serial VectorSize Real))
     (T (Serial VectorSize Real))
-> T (Serial VectorSize Real, T (Serial VectorSize Real))
     (T (T (T VectorSize Real)))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$>
         T (Serial VectorSize Real, T (Serial VectorSize Real))
  (T (Serial VectorSize Real))
forall a. PseudoRing a => T (a, T a) (T a)
Causal.envelopeStereo T (Serial VectorSize Real, T (Serial VectorSize Real))
  (T (T (T VectorSize Real)))
-> SignalOf T (T (Serial VectorSize Real))
-> T (Serial VectorSize Real) (T (T (T VectorSize Real)))
forall (process :: * -> * -> *) a b c.
C process =>
process (a, b) c -> SignalOf process b -> process a c
$>
         ((T (Serial VectorSize Real,
   (Serial VectorSize Real, Serial VectorSize Real))
  (Serial VectorSize Real)
-> T (Serial VectorSize Real,
      T (Serial VectorSize Real, Serial VectorSize Real))
     (T (Serial 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
             ((forall r.
 Serial VectorSize Real
 -> Serial VectorSize Real
 -> CodeGenFunction r (Serial VectorSize Real))
-> T (Serial VectorSize Real,
      (Serial VectorSize Real, Serial VectorSize Real))
     (Serial 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 Serial VectorSize Real
-> Serial VectorSize Real
-> CodeGenFunction r (Serial VectorSize Real)
forall r.
Serial VectorSize Real
-> Serial VectorSize Real
-> CodeGenFunction r (Serial VectorSize Real)
forall a r.
(Field a, RationalConstant a, Real a) =>
a -> a -> CodeGenFunction r a
WaveL.rationalApproxSine1)
               T (Serial VectorSize Real,
   T (Serial VectorSize Real, Serial VectorSize Real))
  (T (Serial VectorSize Real))
-> SignalOf T (Serial VectorSize Real)
-> T (T (Serial VectorSize Real, Serial VectorSize Real))
     (T (Serial VectorSize Real))
forall (process :: * -> * -> *) a b c.
C process =>
process (a, b) c -> SignalOf process a -> process b c
$< T (T RealValue) -> T (Serial VectorSize Real)
piecewiseConstantVector T (T RealValue)
shape)
             T (T (Serial VectorSize Real, Serial VectorSize Real))
  (T (Serial VectorSize Real))
-> ((T (Serial VectorSize Real), T (Serial VectorSize Real))
    -> T (Serial VectorSize Real, Serial VectorSize Real))
-> T (T (Serial VectorSize Real), T (Serial VectorSize Real))
     (T (Serial VectorSize Real))
forall (a :: * -> * -> *) c d b.
Arrow a =>
a c d -> (b -> c) -> a b d
<<^ (T (Serial VectorSize Real), T (Serial VectorSize Real))
-> T (Serial VectorSize Real, Serial VectorSize Real)
forall a b. (T a, T b) -> T (a, b)
Stereo.interleave
           T (T (Serial VectorSize Real), T (Serial VectorSize Real))
  (T (Serial VectorSize Real))
-> SignalOf T (T (Serial VectorSize Real))
-> T (T (Serial VectorSize Real)) (T (Serial VectorSize Real))
forall (process :: * -> * -> *) a b c.
C process =>
process (a, b) c -> SignalOf process a -> process b c
$< ((Serial VectorSize Real
 -> Serial VectorSize Real -> T (Serial VectorSize Real))
-> T (Serial VectorSize Real) (Serial VectorSize Real)
-> T (Serial VectorSize Real) (Serial VectorSize Real)
-> T (Serial VectorSize Real) (T (Serial VectorSize Real))
forall a b c.
(a -> b -> c)
-> T (Serial VectorSize Real) a
-> T (Serial VectorSize Real) b
-> T (Serial VectorSize Real) c
forall (f :: * -> *) a b c.
Applicative f =>
(a -> b -> c) -> f a -> f b -> f c
liftA2 Serial VectorSize Real
-> Serial VectorSize Real -> T (Serial VectorSize Real)
forall a. a -> a -> T a
Stereo.cons T (Serial VectorSize Real) (Serial VectorSize Real)
forall a. T a a
forall {k} (cat :: k -> k -> *) (a :: k). Category cat => cat a a
id (T (Serial VectorSize Real) (Serial VectorSize Real)
-> T (Serial VectorSize Real) (Serial VectorSize Real)
forall a. C a => a -> a
Additive.negate T (Serial VectorSize Real) (Serial VectorSize Real)
forall a. T a a
forall {k} (cat :: k -> k -> *) (a :: k). Category cat => cat a a
id)
                T (Serial VectorSize Real) (T (Serial VectorSize Real))
-> SignalOf T (Serial VectorSize Real)
-> SignalOf T (T (Serial VectorSize Real))
forall (process :: * -> * -> *) a b.
C process =>
process a b -> SignalOf process a -> SignalOf process b
$* Exp Real -> Exp Real -> T (Serial VectorSize Real)
forall n a.
(Vector n a, Transcendental a, RationalConstant a) =>
Exp a -> Exp a -> T (Serial n a)
SigPS.exponential2 Exp Real
decay Exp Real
phase)
           T (T (Serial VectorSize Real)) (T (Serial VectorSize Real))
-> SignalOf T (T (Serial VectorSize Real))
-> SignalOf T (T (Serial VectorSize Real))
forall (process :: * -> * -> *) a b.
C process =>
process a b -> SignalOf process a -> SignalOf process b
$* Exp Real
-> (T (T RealValue), T (T (T RealValue)))
-> T (T (Serial VectorSize Real))
stereoFrequenciesFromDetuneBendModulation Exp Real
speed (T (T RealValue), T (T (T RealValue)))
fm))
      IO
  (Real
   -> Real
   -> ChunkSize
   -> SampleRate Real
   -> Real
   -> LazyTime
   -> Vector (T VectorSize Real))
pingReleaseEnvelope

{- |
Square like wave constructed as difference
of two phase shifted sawtooth like oscillations.
-}
squareStereoReleaseFM ::
   IO (Real -> Real ->
       PC.T Real ->
       PC.T Real ->
       PC.T Real ->
       SigSt.ChunkSize ->
       PC.T (BM.T Real) ->
       Instrument Real (Stereo.T Vector))
squareStereoReleaseFM :: IO
  (Real
   -> Real
   -> T Real
   -> T Real
   -> T Real
   -> ChunkSize
   -> T (T Real)
   -> Instrument Real (T (T VectorSize Real)))
squareStereoReleaseFM =
   ((SampleRate Real
  -> (T Real, T Real)
  -> (T Real, T (T Real), Real)
  -> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real))))
 -> (Real
     -> Real
     -> ChunkSize
     -> SampleRate Real
     -> Real
     -> LazyTime
     -> Vector (T VectorSize Real))
 -> Real
 -> Real
 -> T Real
 -> T Real
 -> T Real
 -> ChunkSize
 -> T (T Real)
 -> Instrument Real (T (T VectorSize Real)))
-> IO
     (SampleRate Real
      -> (T Real, T Real)
      -> (T Real, T (T Real), Real)
      -> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real))))
-> IO
     (Real
      -> Real
      -> ChunkSize
      -> SampleRate Real
      -> Real
      -> LazyTime
      -> Vector (T VectorSize Real))
-> IO
     (Real
      -> Real
      -> T Real
      -> T Real
      -> T Real
      -> ChunkSize
      -> T (T Real)
      -> Instrument Real (T (T VectorSize Real)))
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 Real, T Real)
-> (T Real, T (T Real), Real)
-> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real)))
osc Real
-> Real
-> ChunkSize
-> SampleRate Real
-> Real
-> LazyTime
-> Vector (T VectorSize Real)
env Real
dec Real
rel T Real
detune T Real
shape T Real
phase ChunkSize
vcsize T (T Real)
fm SampleRate Real
sr Real
vel Real
freq LazyTime
dur ->
         T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real)))
-> Vector (T VectorSize Real) -> T (T (T VectorSize Real))
forall a b.
(Storable a, Storable b) =>
T (Vector a) (Vector b) -> Vector a -> Vector b
pioApply
            (SampleRate Real
-> (T Real, T Real)
-> (T Real, T (T Real), Real)
-> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real)))
osc SampleRate Real
sr (T Real
phase, T Real
shape) (T Real
detune, T (T Real)
fm, Real
freq))
            (Real
-> Real
-> ChunkSize
-> SampleRate Real
-> Real
-> LazyTime
-> Vector (T VectorSize Real)
env Real
dec Real
rel ChunkSize
vcsize SampleRate Real
sr Real
vel LazyTime
dur))
      (DSL
  (SampleRate Real
   -> (T Real, T Real)
   -> (T Real, T (T Real), Real)
   -> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real))))
  (Element
     (In
        (SampleRate Real
         -> (T Real, T Real)
         -> (T Real, T (T Real), Real)
         -> T (Vector (T VectorSize Real))
              (Vector (T (T VectorSize Real))))))
  (Element
     (Out
        (SampleRate Real
         -> (T Real, T Real)
         -> (T Real, T (T Real), Real)
         -> T (Vector (T VectorSize Real))
              (Vector (T (T VectorSize Real))))))
-> IO
     (SampleRate Real
      -> (T Real, T Real)
      -> (T Real, T (T Real), Real)
      -> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real))))
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 Real, T Real)
    -> (T Real, T (T Real), Real)
    -> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real))))
   (Element
      (In
         (SampleRate Real
          -> (T Real, T Real)
          -> (T Real, T (T Real), Real)
          -> T (Vector (T VectorSize Real))
               (Vector (T (T VectorSize Real))))))
   (Element
      (Out
         (SampleRate Real
          -> (T Real, T Real)
          -> (T Real, T (T Real), Real)
          -> T (Vector (T VectorSize Real))
               (Vector (T (T VectorSize Real))))))
 -> IO
      (SampleRate Real
       -> (T Real, T Real)
       -> (T Real, T (T Real), Real)
       -> T (Vector (T VectorSize Real))
            (Vector (T (T VectorSize Real)))))
-> DSL
     (SampleRate Real
      -> (T Real, T Real)
      -> (T Real, T (T Real), Real)
      -> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real))))
     (Element
        (In
           (SampleRate Real
            -> (T Real, T Real)
            -> (T Real, T (T Real), Real)
            -> T (Vector (T VectorSize Real))
                 (Vector (T (T VectorSize Real))))))
     (Element
        (Out
           (SampleRate Real
            -> (T Real, T Real)
            -> (T Real, T (T Real), Real)
            -> T (Vector (T VectorSize Real))
                 (Vector (T (T VectorSize Real))))))
-> IO
     (SampleRate Real
      -> (T Real, T Real)
      -> (T Real, T (T Real), Real)
      -> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real))))
forall a b. (a -> b) -> a -> b
$
       ((InputArg (Control (T RealValue)) (Exp Real),
  InputArg (Control (T RealValue)) (Exp Real))
 -> InputArg (DetuneModulation Real) (Exp Real)
 -> SampleRate (Exp Real)
 -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
-> SampleRate (Exp Real)
-> Unwrapped
     ((InputArg (Control (T RealValue)) (Exp Real),
       InputArg (Control (T RealValue)) (Exp Real))
      -> InputArg (DetuneModulation Real) (Exp Real)
      -> SampleRate (Exp Real)
      -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
forall a f. Wrapped a f => f -> SampleRate a -> Unwrapped f
wrapped (((InputArg (Control (T RealValue)) (Exp Real),
   InputArg (Control (T RealValue)) (Exp Real))
  -> InputArg (DetuneModulation Real) (Exp Real)
  -> SampleRate (Exp Real)
  -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
 -> SampleRate (Exp Real)
 -> Unwrapped
      ((InputArg (Control (T RealValue)) (Exp Real),
        InputArg (Control (T RealValue)) (Exp Real))
       -> InputArg (DetuneModulation Real) (Exp Real)
       -> SampleRate (Exp Real)
       -> T (Serial VectorSize Real) (T (T (T VectorSize Real)))))
-> ((InputArg (Control (T RealValue)) (Exp Real),
     InputArg (Control (T RealValue)) (Exp Real))
    -> InputArg (DetuneModulation Real) (Exp Real)
    -> SampleRate (Exp Real)
    -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
-> SampleRate (Exp Real)
-> Unwrapped
     ((InputArg (Control (T RealValue)) (Exp Real),
       InputArg (Control (T RealValue)) (Exp Real))
      -> InputArg (DetuneModulation Real) (Exp Real)
      -> SampleRate (Exp Real)
      -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
forall a b. (a -> b) -> a -> b
$ \(Control T (T RealValue)
phs, Control T (T RealValue)
shp) (DetuneModulation (T (T RealValue), T (T (T RealValue)))
fm) ->
       (SampleRate (Exp Real) -> Exp Real -> Exp Real)
-> Exp Real
-> (Exp Real
    -> SampleRate (Exp Real)
    -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
-> SampleRate (Exp Real)
-> T (Serial VectorSize 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 (Serial VectorSize Real) (T (T (T VectorSize Real))))
 -> SampleRate (Exp Real)
 -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
-> (Exp Real
    -> SampleRate (Exp Real)
    -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
-> SampleRate (Exp Real)
-> T (Serial VectorSize Real) (T (T (T VectorSize Real)))
forall a b. (a -> b) -> a -> b
$ \Exp Real
speed SampleRate (Exp Real)
_sr ->
         (let chanOsci ::
                 Causal.T
                    ((VectorValue, VectorValue), VectorValue)
                    VectorValue
              chanOsci :: T ((Serial VectorSize Real, Serial VectorSize Real),
   Serial VectorSize Real)
  (Serial VectorSize Real)
chanOsci =
                 (((forall r.
 Serial VectorSize Real
 -> Serial VectorSize Real
 -> CodeGenFunction r (Serial VectorSize Real))
-> T (Serial VectorSize Real,
      (Serial VectorSize Real, Serial VectorSize Real))
     (Serial 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 Serial VectorSize Real
-> Serial VectorSize Real
-> CodeGenFunction r (Serial VectorSize Real)
forall r.
Serial VectorSize Real
-> Serial VectorSize Real
-> CodeGenFunction r (Serial VectorSize Real)
forall a r.
(Field a, RationalConstant a, Real a) =>
a -> a -> CodeGenFunction r a
WaveL.rationalApproxSine1
                   T (Serial VectorSize Real,
   (Serial VectorSize Real, Serial VectorSize Real))
  (Serial VectorSize Real)
-> T (Serial VectorSize Real,
      (Serial VectorSize Real, Serial VectorSize Real))
     (Serial VectorSize Real,
      (Serial VectorSize Real, Serial VectorSize Real))
-> T (Serial VectorSize Real,
      (Serial VectorSize Real, Serial VectorSize Real))
     (Serial VectorSize Real)
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
<<<
                   T (Serial VectorSize Real, Serial VectorSize Real)
  (Serial VectorSize Real, Serial VectorSize Real)
-> T (Serial VectorSize Real,
      (Serial VectorSize Real, Serial VectorSize Real))
     (Serial VectorSize Real,
      (Serial VectorSize Real, Serial 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 (Serial VectorSize Real) (Serial VectorSize Real)
-> T (Serial VectorSize Real, Serial VectorSize Real)
     (Serial VectorSize Real, Serial 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 (Serial VectorSize Real) (Serial VectorSize Real)
-> T (Serial VectorSize Real) (Serial VectorSize Real)
forall a. C a => a -> a
Additive.negate T (Serial VectorSize Real) (Serial VectorSize Real)
forall a. T a a
forall {k} (cat :: k -> k -> *) (a :: k). Category cat => cat a a
id)))
                  T (Serial VectorSize Real,
   (Serial VectorSize Real, Serial VectorSize Real))
  (Serial VectorSize Real)
-> T (Serial VectorSize Real,
      (Serial VectorSize Real, Serial VectorSize Real))
     (Serial VectorSize Real)
-> T (Serial VectorSize Real,
      (Serial VectorSize Real, Serial VectorSize Real))
     (Serial VectorSize Real)
forall a. C a => a -> a -> a
-
                   (forall r.
 Serial VectorSize Real
 -> Serial VectorSize Real
 -> CodeGenFunction r (Serial VectorSize Real))
-> T (Serial VectorSize Real,
      (Serial VectorSize Real, Serial VectorSize Real))
     (Serial 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 Serial VectorSize Real
-> Serial VectorSize Real
-> CodeGenFunction r (Serial VectorSize Real)
forall r.
Serial VectorSize Real
-> Serial VectorSize Real
-> CodeGenFunction r (Serial VectorSize Real)
forall a r.
(Field a, RationalConstant a, Real a) =>
a -> a -> CodeGenFunction r a
WaveL.rationalApproxSine1)
                 T (Serial VectorSize Real,
   (Serial VectorSize Real, Serial VectorSize Real))
  (Serial VectorSize Real)
-> (((Serial VectorSize Real, Serial VectorSize Real),
     Serial VectorSize Real)
    -> (Serial VectorSize Real,
        (Serial VectorSize Real, Serial VectorSize Real)))
-> T ((Serial VectorSize Real, Serial VectorSize Real),
      Serial VectorSize Real)
     (Serial VectorSize Real)
forall (a :: * -> * -> *) c d b.
Arrow a =>
a c d -> (b -> c) -> a b d
<<^
                 (\((Serial VectorSize Real
p,Serial VectorSize Real
s),Serial VectorSize Real
f) -> (Serial VectorSize Real
s,(Serial VectorSize Real
p,Serial VectorSize Real
f)))
          in T (Serial VectorSize Real) -> T (T (T VectorSize Real))
forall a. T (T a) -> T (T a)
Stereo.multiValue (T (Serial VectorSize Real) -> T (T (T VectorSize Real)))
-> T (Serial VectorSize Real, T (Serial VectorSize Real))
     (T (Serial VectorSize Real))
-> T (Serial VectorSize Real, T (Serial VectorSize Real))
     (T (T (T VectorSize Real)))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$>
             T (Serial VectorSize Real, T (Serial VectorSize Real))
  (T (Serial VectorSize Real))
forall a. PseudoRing a => T (a, T a) (T a)
Causal.envelopeStereo T (Serial VectorSize Real, T (Serial VectorSize Real))
  (T (T (T VectorSize Real)))
-> SignalOf T (T (Serial VectorSize Real))
-> T (Serial VectorSize Real) (T (T (T VectorSize Real)))
forall (process :: * -> * -> *) a b c.
C process =>
process (a, b) c -> SignalOf process b -> process a c
$>
              ((T ((Serial VectorSize Real, Serial VectorSize Real),
   Serial VectorSize Real)
  (Serial VectorSize Real)
-> T ((Serial VectorSize Real, Serial VectorSize Real),
      T (Serial VectorSize Real))
     (T (Serial 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 ((Serial VectorSize Real, Serial VectorSize Real),
   Serial VectorSize Real)
  (Serial VectorSize Real)
chanOsci
                   T ((Serial VectorSize Real, Serial VectorSize Real),
   T (Serial VectorSize Real))
  (T (Serial VectorSize Real))
-> SignalOf T (Serial VectorSize Real, Serial VectorSize Real)
-> T (T (Serial VectorSize Real)) (T (Serial VectorSize Real))
forall (process :: * -> * -> *) a b c.
C process =>
process (a, b) c -> SignalOf process a -> process b c
$< (Serial VectorSize Real
 -> Serial VectorSize Real
 -> (Serial VectorSize Real, Serial VectorSize Real))
-> T (Serial VectorSize Real)
-> T (Serial VectorSize Real)
-> T (Serial VectorSize Real, Serial VectorSize Real)
forall a b c. (a -> b -> c) -> T a -> T b -> T c
forall (f :: * -> *) a b c.
Applicative f =>
(a -> b -> c) -> f a -> f b -> f c
liftA2 (,)
                         (T (T RealValue) -> T (Serial VectorSize Real)
piecewiseConstantVector T (T RealValue)
phs)
                         (T (T RealValue) -> T (Serial VectorSize Real)
piecewiseConstantVector T (T RealValue)
shp))
                T (T (Serial VectorSize Real)) (T (Serial VectorSize Real))
-> SignalOf T (T (Serial VectorSize Real))
-> SignalOf T (T (Serial VectorSize Real))
forall (process :: * -> * -> *) a b.
C process =>
process a b -> SignalOf process a -> SignalOf process b
$* Exp Real
-> (T (T RealValue), T (T (T RealValue)))
-> T (T (Serial VectorSize Real))
stereoFrequenciesFromDetuneBendModulation Exp Real
speed (T (T RealValue), T (T (T RealValue)))
fm)))
      IO
  (Real
   -> Real
   -> ChunkSize
   -> SampleRate Real
   -> Real
   -> LazyTime
   -> Vector (T VectorSize Real))
pingReleaseEnvelope


type Triple a = (a, a, a)

bellStereoFM ::
   IO (Real -> Real ->
       PC.T Real ->
       SigSt.ChunkSize ->
       PC.T (BM.T Real) ->
       Instrument Real (Stereo.T Vector))
bellStereoFM :: IO
  (Real
   -> Real
   -> T Real
   -> ChunkSize
   -> T (T Real)
   -> Instrument Real (T (T VectorSize Real)))
bellStereoFM =
   ((SampleRate Real
  -> (T Real, T (T Real), Real)
  -> Real
  -> Vector (T VectorSize Real)
  -> Vector (T VectorSize Real)
  -> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real))))
 -> (Real
     -> Real
     -> ChunkSize
     -> SampleRate Real
     -> Real
     -> LazyTime
     -> Vector (T VectorSize Real))
 -> Real
 -> Real
 -> T Real
 -> ChunkSize
 -> T (T Real)
 -> Instrument Real (T (T VectorSize Real)))
-> IO
     (SampleRate Real
      -> (T Real, T (T Real), Real)
      -> Real
      -> Vector (T VectorSize Real)
      -> Vector (T VectorSize Real)
      -> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real))))
-> IO
     (Real
      -> Real
      -> ChunkSize
      -> SampleRate Real
      -> Real
      -> LazyTime
      -> Vector (T VectorSize Real))
-> IO
     (Real
      -> Real
      -> T Real
      -> ChunkSize
      -> T (T Real)
      -> Instrument Real (T (T VectorSize Real)))
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 Real, T (T Real), Real)
-> Real
-> Vector (T VectorSize Real)
-> Vector (T VectorSize Real)
-> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real)))
osc Real
-> Real
-> ChunkSize
-> SampleRate Real
-> Real
-> LazyTime
-> Vector (T VectorSize Real)
env Real
dec Real
rel T Real
detune ChunkSize
vcsize T (T Real)
fm SampleRate Real
sr Real
vel Real
freq LazyTime
dur ->
         T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real)))
-> Vector (T VectorSize Real) -> T (T (T VectorSize Real))
forall a b.
(Storable a, Storable b) =>
T (Vector a) (Vector b) -> Vector a -> Vector b
pioApply
             (SampleRate Real
-> (T Real, T (T Real), Real)
-> Real
-> Vector (T VectorSize Real)
-> Vector (T VectorSize Real)
-> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real)))
osc SampleRate Real
sr (T Real
detune, T (T Real)
fm, Real
freq) Real
vel
                  (Real
-> Real
-> ChunkSize
-> SampleRate Real
-> Real
-> LazyTime
-> Vector (T VectorSize Real)
env (Real
decReal -> Real -> Real
forall a. Fractional a => a -> a -> a
/Real
4) Real
rel ChunkSize
vcsize SampleRate Real
sr Real
vel LazyTime
dur)
                  (Real
-> Real
-> ChunkSize
-> SampleRate Real
-> Real
-> LazyTime
-> Vector (T VectorSize Real)
env (Real
decReal -> Real -> Real
forall a. Fractional a => a -> a -> a
/Real
7) Real
rel ChunkSize
vcsize SampleRate Real
sr Real
vel LazyTime
dur))
             (Real
-> Real
-> ChunkSize
-> SampleRate Real
-> Real
-> LazyTime
-> Vector (T VectorSize Real)
env Real
dec Real
rel ChunkSize
vcsize SampleRate Real
sr Real
vel LazyTime
dur))
      (DSL
  (SampleRate Real
   -> (T Real, T (T Real), Real)
   -> Real
   -> Vector (T VectorSize Real)
   -> Vector (T VectorSize Real)
   -> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real))))
  (Element
     (In
        (SampleRate Real
         -> (T Real, T (T Real), Real)
         -> Real
         -> Vector (T VectorSize Real)
         -> Vector (T VectorSize Real)
         -> T (Vector (T VectorSize Real))
              (Vector (T (T VectorSize Real))))))
  (Element
     (Out
        (SampleRate Real
         -> (T Real, T (T Real), Real)
         -> Real
         -> Vector (T VectorSize Real)
         -> Vector (T VectorSize Real)
         -> T (Vector (T VectorSize Real))
              (Vector (T (T VectorSize Real))))))
-> IO
     (SampleRate Real
      -> (T Real, T (T Real), Real)
      -> Real
      -> Vector (T VectorSize Real)
      -> Vector (T VectorSize Real)
      -> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real))))
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 Real, T (T Real), Real)
    -> Real
    -> Vector (T VectorSize Real)
    -> Vector (T VectorSize Real)
    -> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real))))
   (Element
      (In
         (SampleRate Real
          -> (T Real, T (T Real), Real)
          -> Real
          -> Vector (T VectorSize Real)
          -> Vector (T VectorSize Real)
          -> T (Vector (T VectorSize Real))
               (Vector (T (T VectorSize Real))))))
   (Element
      (Out
         (SampleRate Real
          -> (T Real, T (T Real), Real)
          -> Real
          -> Vector (T VectorSize Real)
          -> Vector (T VectorSize Real)
          -> T (Vector (T VectorSize Real))
               (Vector (T (T VectorSize Real))))))
 -> IO
      (SampleRate Real
       -> (T Real, T (T Real), Real)
       -> Real
       -> Vector (T VectorSize Real)
       -> Vector (T VectorSize Real)
       -> T (Vector (T VectorSize Real))
            (Vector (T (T VectorSize Real)))))
-> DSL
     (SampleRate Real
      -> (T Real, T (T Real), Real)
      -> Real
      -> Vector (T VectorSize Real)
      -> Vector (T VectorSize Real)
      -> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real))))
     (Element
        (In
           (SampleRate Real
            -> (T Real, T (T Real), Real)
            -> Real
            -> Vector (T VectorSize Real)
            -> Vector (T VectorSize Real)
            -> T (Vector (T VectorSize Real))
                 (Vector (T (T VectorSize Real))))))
     (Element
        (Out
           (SampleRate Real
            -> (T Real, T (T Real), Real)
            -> Real
            -> Vector (T VectorSize Real)
            -> Vector (T VectorSize Real)
            -> T (Vector (T VectorSize Real))
                 (Vector (T (T VectorSize Real))))))
-> IO
     (SampleRate Real
      -> (T Real, T (T Real), Real)
      -> Real
      -> Vector (T VectorSize Real)
      -> Vector (T VectorSize Real)
      -> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real))))
forall a b. (a -> b) -> a -> b
$
       (InputArg (DetuneModulation Real) (Exp Real)
 -> Arg Number (Exp Real)
 -> InputArg (Signal (Serial VectorSize Real)) (Exp Real)
 -> InputArg (Signal (Serial VectorSize Real)) (Exp Real)
 -> SampleRate (Exp Real)
 -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
-> SampleRate (Exp Real)
-> Unwrapped
     (InputArg (DetuneModulation Real) (Exp Real)
      -> Arg Number (Exp Real)
      -> InputArg (Signal (Serial VectorSize Real)) (Exp Real)
      -> InputArg (Signal (Serial VectorSize Real)) (Exp Real)
      -> SampleRate (Exp Real)
      -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
forall a f. Wrapped a f => f -> SampleRate a -> Unwrapped f
wrapped ((InputArg (DetuneModulation Real) (Exp Real)
  -> Arg Number (Exp Real)
  -> InputArg (Signal (Serial VectorSize Real)) (Exp Real)
  -> InputArg (Signal (Serial VectorSize Real)) (Exp Real)
  -> SampleRate (Exp Real)
  -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
 -> SampleRate (Exp Real)
 -> Unwrapped
      (InputArg (DetuneModulation Real) (Exp Real)
       -> Arg Number (Exp Real)
       -> InputArg (Signal (Serial VectorSize Real)) (Exp Real)
       -> InputArg (Signal (Serial VectorSize Real)) (Exp Real)
       -> SampleRate (Exp Real)
       -> T (Serial VectorSize Real) (T (T (T VectorSize Real)))))
-> (InputArg (DetuneModulation Real) (Exp Real)
    -> Arg Number (Exp Real)
    -> InputArg (Signal (Serial VectorSize Real)) (Exp Real)
    -> InputArg (Signal (Serial VectorSize Real)) (Exp Real)
    -> SampleRate (Exp Real)
    -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
-> SampleRate (Exp Real)
-> Unwrapped
     (InputArg (DetuneModulation Real) (Exp Real)
      -> Arg Number (Exp Real)
      -> InputArg (Signal (Serial VectorSize Real)) (Exp Real)
      -> InputArg (Signal (Serial VectorSize Real)) (Exp Real)
      -> SampleRate (Exp Real)
      -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
forall a b. (a -> b) -> a -> b
$
       \(DetuneModulation (T (T RealValue), T (T (T RealValue)))
fm) (Number Exp Real
vel) (Signal T (Serial VectorSize Real)
env4) (Signal T (Serial VectorSize Real)
env7) ->
       (SampleRate (Exp Real) -> Exp Real -> Exp Real)
-> Exp Real
-> (Exp Real
    -> SampleRate (Exp Real)
    -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
-> SampleRate (Exp Real)
-> T (Serial VectorSize 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 (Serial VectorSize Real) (T (T (T VectorSize Real))))
 -> SampleRate (Exp Real)
 -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
-> (Exp Real
    -> SampleRate (Exp Real)
    -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
-> SampleRate (Exp Real)
-> T (Serial VectorSize Real) (T (T (T VectorSize Real)))
forall a b. (a -> b) -> a -> b
$ \Exp Real
speed SampleRate (Exp Real)
_sr ->
         (let osci ::
                 (Triple VectorValue -> VectorValue) ->
                 Exp Real ->
                 Exp Real ->
                 Causal.T
                    (Triple VectorValue, Stereo.T VectorValue)
                    (Stereo.T VectorValue)
              osci :: (Triple (Serial VectorSize Real) -> Serial VectorSize Real)
-> Exp Real
-> Exp Real
-> T (Triple (Serial VectorSize Real), T (Serial VectorSize Real))
     (T (Serial VectorSize Real))
osci Triple (Serial VectorSize Real) -> Serial VectorSize Real
sel Exp Real
v Exp Real
d =
                 T (Serial VectorSize Real, T (Serial VectorSize Real))
  (T (Serial VectorSize Real))
forall a. PseudoRing a => T (a, T a) (T a)
Causal.envelopeStereo
                 T (Serial VectorSize Real, T (Serial VectorSize Real))
  (T (Serial VectorSize Real))
-> T (Triple (Serial VectorSize Real), T (Serial VectorSize Real))
     (Serial VectorSize Real, T (Serial VectorSize Real))
-> T (Triple (Serial VectorSize Real), T (Serial VectorSize Real))
     (T (Serial VectorSize Real))
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
<<<
                 ((Triple (Serial VectorSize Real) -> Serial VectorSize Real)
-> T (Triple (Serial VectorSize Real)) (Serial VectorSize Real)
forall b c. (b -> c) -> T b c
forall (a :: * -> * -> *) b c. Arrow a => (b -> c) -> a b c
arr Triple (Serial VectorSize Real) -> Serial VectorSize Real
sel T (Triple (Serial VectorSize Real)) (Serial VectorSize Real)
-> T (T (Serial VectorSize Real)) (T (Serial VectorSize Real))
-> T (Triple (Serial VectorSize Real), T (Serial VectorSize Real))
     (Serial VectorSize Real, T (Serial VectorSize Real))
forall b c b' c'. T b c -> T b' c' -> T (b, b') (c, c')
forall (a :: * -> * -> *) b c b' c'.
Arrow a =>
a b c -> a b' c' -> a (b, b') (c, c')
***
                    (Exp Real
-> T (T (Serial VectorSize Real)) (T (Serial VectorSize Real))
forall n a.
(Positive n, PseudoRing a) =>
Exp a -> T (T (Serial n a)) (T (Serial n a))
CausalPS.amplifyStereo Exp Real
v
                     T (T (Serial VectorSize Real)) (T (Serial VectorSize Real))
-> T (T (Serial VectorSize Real)) (T (Serial VectorSize Real))
-> T (T (Serial VectorSize Real)) (T (Serial VectorSize Real))
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
<<<
                     T (Serial VectorSize Real) (Serial VectorSize Real)
-> T (T (Serial VectorSize Real)) (T (Serial 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.
 Serial VectorSize Real
 -> CodeGenFunction r (Serial VectorSize Real))
-> T (Serial VectorSize Real, Serial VectorSize Real)
     (Serial 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 Serial VectorSize Real
-> CodeGenFunction r (Serial VectorSize Real)
forall r.
Serial VectorSize Real
-> CodeGenFunction r (Serial VectorSize Real)
forall a r.
(PseudoRing a, RationalConstant a, Real a) =>
a -> CodeGenFunction r a
WaveL.approxSine4 T (Serial VectorSize Real, Serial VectorSize Real)
  (Serial VectorSize Real)
-> SignalOf T (Serial VectorSize Real)
-> T (Serial VectorSize Real) (Serial VectorSize Real)
forall (process :: * -> * -> *) a b c.
C process =>
process (a, b) c -> SignalOf process a -> process b c
$< SignalOf T (Serial VectorSize Real)
T (Serial VectorSize Real)
forall a. C a => a
zero)
                     T (T (Serial VectorSize Real)) (T (Serial VectorSize Real))
-> T (T (Serial VectorSize Real)) (T (Serial VectorSize Real))
-> T (T (Serial VectorSize Real)) (T (Serial VectorSize Real))
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 (Serial VectorSize Real)) (T (Serial VectorSize Real))
forall n a.
(Positive n, PseudoRing a) =>
Exp a -> T (T (Serial n a)) (T (Serial n a))
CausalPS.amplifyStereo Exp Real
d))
          in  T (Serial VectorSize Real) -> T (T (T VectorSize Real))
forall a. T (T a) -> T (T a)
Stereo.multiValue (T (Serial VectorSize Real) -> T (T (T VectorSize Real)))
-> T (Triple (Serial VectorSize Real), T (Serial VectorSize Real))
     (T (Serial VectorSize Real))
-> T (Triple (Serial VectorSize Real), T (Serial VectorSize Real))
     (T (T (T VectorSize Real)))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$>
              [T (Triple (Serial VectorSize Real), T (Serial VectorSize Real))
   (T (Serial VectorSize Real))]
-> T (Triple (Serial VectorSize Real), T (Serial VectorSize Real))
     (T (Serial VectorSize Real))
forall a. C a => [a] -> a
sumNested
                 [(Triple (Serial VectorSize Real) -> Serial VectorSize Real)
-> Exp Real
-> Exp Real
-> T (Triple (Serial VectorSize Real), T (Serial VectorSize Real))
     (T (Serial VectorSize Real))
osci Triple (Serial VectorSize Real) -> Serial VectorSize Real
forall a b c. (a, b, c) -> a
fst3  Exp Real
0.6              Exp Real
1,
                  (Triple (Serial VectorSize Real) -> Serial VectorSize Real)
-> Exp Real
-> Exp Real
-> T (Triple (Serial VectorSize Real), T (Serial VectorSize Real))
     (T (Serial VectorSize Real))
osci Triple (Serial VectorSize Real) -> Serial VectorSize Real
forall a b c. (a, b, c) -> b
snd3 (Exp Real
0.02 Exp Real -> Exp Real -> Exp Real
forall a. C a => a -> a -> a
*  Exp Real
50Exp Real -> Exp Real -> Exp Real
forall a. C a => a -> a -> a
^?Exp Real
vel) Exp Real
4,
                  (Triple (Serial VectorSize Real) -> Serial VectorSize Real)
-> Exp Real
-> Exp Real
-> T (Triple (Serial VectorSize Real), T (Serial VectorSize Real))
     (T (Serial VectorSize Real))
osci Triple (Serial VectorSize Real) -> Serial VectorSize Real
forall a b c. (a, b, c) -> c
thd3 (Exp Real
0.02 Exp Real -> Exp Real -> Exp Real
forall a. C a => a -> a -> a
* Exp Real
100Exp Real -> Exp Real -> Exp Real
forall a. C a => a -> a -> a
^?Exp Real
vel) Exp Real
7]
              T (Triple (Serial VectorSize Real), T (Serial VectorSize Real))
  (T (T (T VectorSize Real)))
-> T (Serial VectorSize Real,
      (Serial VectorSize Real, Serial VectorSize Real))
     (Triple (Serial VectorSize Real), T (Serial VectorSize Real))
-> T (Serial VectorSize Real,
      (Serial VectorSize Real, Serial VectorSize Real))
     (T (T (T VectorSize Real)))
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 (Serial VectorSize Real))
-> T (Triple (Serial VectorSize Real))
     (Triple (Serial VectorSize Real), T (Serial VectorSize Real))
forall (process :: * -> * -> *) a b.
C process =>
SignalOf process a -> process b (b, a)
CausalClass.feedSnd
                 (Exp Real
-> (T (T RealValue), T (T (T RealValue)))
-> T (T (Serial VectorSize Real))
stereoFrequenciesFromDetuneBendModulation Exp Real
speed (T (T RealValue), T (T (T RealValue)))
fm)
              T (Triple (Serial VectorSize Real))
  (Triple (Serial VectorSize Real), T (Serial VectorSize Real))
-> T (Serial VectorSize Real,
      (Serial VectorSize Real, Serial VectorSize Real))
     (Triple (Serial VectorSize Real))
-> T (Serial VectorSize Real,
      (Serial VectorSize Real, Serial VectorSize Real))
     (Triple (Serial VectorSize Real), T (Serial VectorSize Real))
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
<<<
              ((Serial VectorSize Real,
  (Serial VectorSize Real, Serial VectorSize Real))
 -> Triple (Serial VectorSize Real))
-> T (Serial VectorSize Real,
      (Serial VectorSize Real, Serial VectorSize Real))
     (Triple (Serial VectorSize Real))
forall b c. (b -> c) -> T b c
forall (a :: * -> * -> *) b c. Arrow a => (b -> c) -> a b c
arr (\(Serial VectorSize Real
e1,(Serial VectorSize Real
e4,Serial VectorSize Real
e7)) -> (Serial VectorSize Real
e1,Serial VectorSize Real
e4,Serial VectorSize Real
e7))
               T (Serial VectorSize Real,
   (Serial VectorSize Real, Serial VectorSize Real))
  (T (T (T VectorSize Real)))
-> SignalOf T (Serial VectorSize Real, Serial VectorSize Real)
-> T (Serial VectorSize Real) (T (T (T VectorSize Real)))
forall (process :: * -> * -> *) a b c.
C process =>
process (a, b) c -> SignalOf process b -> process a c
$> {-
                  Be careful, those storable vectors shorten the whole sound
                  if they have shorter release than the main envelope.
                  -}
                  (Serial VectorSize Real
 -> Serial VectorSize Real
 -> (Serial VectorSize Real, Serial VectorSize Real))
-> T (Serial VectorSize Real)
-> T (Serial VectorSize Real)
-> T (Serial VectorSize Real, Serial VectorSize Real)
forall a b c. (a -> b -> c) -> T a -> T b -> T c
forall (f :: * -> *) a b c.
Applicative f =>
(a -> b -> c) -> f a -> f b -> f c
liftA2 (,) T (Serial VectorSize Real)
env4 T (Serial VectorSize Real)
env7))
      IO
  (Real
   -> Real
   -> ChunkSize
   -> SampleRate Real
   -> Real
   -> LazyTime
   -> Vector (T VectorSize Real))
pingReleaseEnvelope

bellNoiseStereoFM ::
   IO (Real -> Real ->
       PC.T Real -> PC.T Real ->
       SigSt.ChunkSize ->
       PC.T (BM.T Real) ->
       Instrument Real (Stereo.T Vector))
bellNoiseStereoFM :: IO
  (Real
   -> Real
   -> T Real
   -> T Real
   -> ChunkSize
   -> T (T Real)
   -> Instrument Real (T (T VectorSize Real)))
bellNoiseStereoFM =
   ((SampleRate Real
  -> (T (T Real), Real)
  -> (T Real, T Real)
  -> Real
  -> Vector (T VectorSize Real)
  -> Vector (T VectorSize Real)
  -> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real))))
 -> (Real
     -> Real
     -> ChunkSize
     -> SampleRate Real
     -> Real
     -> LazyTime
     -> Vector (T VectorSize Real))
 -> Real
 -> Real
 -> T Real
 -> T Real
 -> ChunkSize
 -> T (T Real)
 -> Instrument Real (T (T VectorSize Real)))
-> IO
     (SampleRate Real
      -> (T (T Real), Real)
      -> (T Real, T Real)
      -> Real
      -> Vector (T VectorSize Real)
      -> Vector (T VectorSize Real)
      -> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real))))
-> IO
     (Real
      -> Real
      -> ChunkSize
      -> SampleRate Real
      -> Real
      -> LazyTime
      -> Vector (T VectorSize Real))
-> IO
     (Real
      -> Real
      -> T Real
      -> T Real
      -> ChunkSize
      -> T (T Real)
      -> Instrument Real (T (T VectorSize Real)))
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 Real), Real)
-> (T Real, T Real)
-> Real
-> Vector (T VectorSize Real)
-> Vector (T VectorSize Real)
-> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real)))
osc Real
-> Real
-> ChunkSize
-> SampleRate Real
-> Real
-> LazyTime
-> Vector (T VectorSize Real)
env Real
dec Real
rel T Real
noiseAmp T Real
noiseReson ChunkSize
vcsize T (T Real)
fm SampleRate Real
sr Real
vel Real
freq LazyTime
dur ->
         T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real)))
-> Vector (T VectorSize Real) -> T (T (T VectorSize Real))
forall a b.
(Storable a, Storable b) =>
T (Vector a) (Vector b) -> Vector a -> Vector b
pioApply
            (SampleRate Real
-> (T (T Real), Real)
-> (T Real, T Real)
-> Real
-> Vector (T VectorSize Real)
-> Vector (T VectorSize Real)
-> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real)))
osc SampleRate Real
sr (T (T Real)
fm, Real
freq) (T Real
noiseAmp, T Real
noiseReson) Real
vel
               (Real
-> Real
-> ChunkSize
-> SampleRate Real
-> Real
-> LazyTime
-> Vector (T VectorSize Real)
env (Real
decReal -> Real -> Real
forall a. Fractional a => a -> a -> a
/Real
4) Real
rel ChunkSize
vcsize SampleRate Real
sr Real
vel LazyTime
dur)
               (Real
-> Real
-> ChunkSize
-> SampleRate Real
-> Real
-> LazyTime
-> Vector (T VectorSize Real)
env (Real
decReal -> Real -> Real
forall a. Fractional a => a -> a -> a
/Real
7) Real
rel ChunkSize
vcsize SampleRate Real
sr Real
vel LazyTime
dur))
            (Real
-> Real
-> ChunkSize
-> SampleRate Real
-> Real
-> LazyTime
-> Vector (T VectorSize Real)
env Real
dec Real
rel ChunkSize
vcsize SampleRate Real
sr Real
vel LazyTime
dur))
      (DSL
  (SampleRate Real
   -> (T (T Real), Real)
   -> (T Real, T Real)
   -> Real
   -> Vector (T VectorSize Real)
   -> Vector (T VectorSize Real)
   -> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real))))
  (Element
     (In
        (SampleRate Real
         -> (T (T Real), Real)
         -> (T Real, T Real)
         -> Real
         -> Vector (T VectorSize Real)
         -> Vector (T VectorSize Real)
         -> T (Vector (T VectorSize Real))
              (Vector (T (T VectorSize Real))))))
  (Element
     (Out
        (SampleRate Real
         -> (T (T Real), Real)
         -> (T Real, T Real)
         -> Real
         -> Vector (T VectorSize Real)
         -> Vector (T VectorSize Real)
         -> T (Vector (T VectorSize Real))
              (Vector (T (T VectorSize Real))))))
-> IO
     (SampleRate Real
      -> (T (T Real), Real)
      -> (T Real, T Real)
      -> Real
      -> Vector (T VectorSize Real)
      -> Vector (T VectorSize Real)
      -> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real))))
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 Real), Real)
    -> (T Real, T Real)
    -> Real
    -> Vector (T VectorSize Real)
    -> Vector (T VectorSize Real)
    -> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real))))
   (Element
      (In
         (SampleRate Real
          -> (T (T Real), Real)
          -> (T Real, T Real)
          -> Real
          -> Vector (T VectorSize Real)
          -> Vector (T VectorSize Real)
          -> T (Vector (T VectorSize Real))
               (Vector (T (T VectorSize Real))))))
   (Element
      (Out
         (SampleRate Real
          -> (T (T Real), Real)
          -> (T Real, T Real)
          -> Real
          -> Vector (T VectorSize Real)
          -> Vector (T VectorSize Real)
          -> T (Vector (T VectorSize Real))
               (Vector (T (T VectorSize Real))))))
 -> IO
      (SampleRate Real
       -> (T (T Real), Real)
       -> (T Real, T Real)
       -> Real
       -> Vector (T VectorSize Real)
       -> Vector (T VectorSize Real)
       -> T (Vector (T VectorSize Real))
            (Vector (T (T VectorSize Real)))))
-> DSL
     (SampleRate Real
      -> (T (T Real), Real)
      -> (T Real, T Real)
      -> Real
      -> Vector (T VectorSize Real)
      -> Vector (T VectorSize Real)
      -> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real))))
     (Element
        (In
           (SampleRate Real
            -> (T (T Real), Real)
            -> (T Real, T Real)
            -> Real
            -> Vector (T VectorSize Real)
            -> Vector (T VectorSize Real)
            -> T (Vector (T VectorSize Real))
                 (Vector (T (T VectorSize Real))))))
     (Element
        (Out
           (SampleRate Real
            -> (T (T Real), Real)
            -> (T Real, T Real)
            -> Real
            -> Vector (T VectorSize Real)
            -> Vector (T VectorSize Real)
            -> T (Vector (T VectorSize Real))
                 (Vector (T (T VectorSize Real))))))
-> IO
     (SampleRate Real
      -> (T (T Real), Real)
      -> (T Real, T Real)
      -> Real
      -> Vector (T VectorSize Real)
      -> Vector (T VectorSize Real)
      -> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real))))
forall a b. (a -> b) -> a -> b
$
       (InputArg (Modulation Real) (Exp Real)
 -> (InputArg (Control (T RealValue)) (Exp Real),
     InputArg (Control (T (MultiValuesOf (Exp Real)))) (Exp Real))
 -> Arg Number (Exp Real)
 -> InputArg (Signal (Serial VectorSize Real)) (Exp Real)
 -> InputArg (Signal (Serial VectorSize Real)) (Exp Real)
 -> SampleRate (Exp Real)
 -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
-> SampleRate (Exp Real)
-> Unwrapped
     (InputArg (Modulation Real) (Exp Real)
      -> (InputArg (Control (T RealValue)) (Exp Real),
          InputArg (Control (T (MultiValuesOf (Exp Real)))) (Exp Real))
      -> Arg Number (Exp Real)
      -> InputArg (Signal (Serial VectorSize Real)) (Exp Real)
      -> InputArg (Signal (Serial VectorSize Real)) (Exp Real)
      -> SampleRate (Exp Real)
      -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
forall a f. Wrapped a f => f -> SampleRate a -> Unwrapped f
wrapped ((InputArg (Modulation Real) (Exp Real)
  -> (InputArg (Control (T RealValue)) (Exp Real),
      InputArg (Control (T (MultiValuesOf (Exp Real)))) (Exp Real))
  -> Arg Number (Exp Real)
  -> InputArg (Signal (Serial VectorSize Real)) (Exp Real)
  -> InputArg (Signal (Serial VectorSize Real)) (Exp Real)
  -> SampleRate (Exp Real)
  -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
 -> SampleRate (Exp Real)
 -> Unwrapped
      (InputArg (Modulation Real) (Exp Real)
       -> (InputArg (Control (T RealValue)) (Exp Real),
           InputArg (Control (T (MultiValuesOf (Exp Real)))) (Exp Real))
       -> Arg Number (Exp Real)
       -> InputArg (Signal (Serial VectorSize Real)) (Exp Real)
       -> InputArg (Signal (Serial VectorSize Real)) (Exp Real)
       -> SampleRate (Exp Real)
       -> T (Serial VectorSize Real) (T (T (T VectorSize Real)))))
-> (InputArg (Modulation Real) (Exp Real)
    -> (InputArg (Control (T RealValue)) (Exp Real),
        InputArg (Control (T (MultiValuesOf (Exp Real)))) (Exp Real))
    -> Arg Number (Exp Real)
    -> InputArg (Signal (Serial VectorSize Real)) (Exp Real)
    -> InputArg (Signal (Serial VectorSize Real)) (Exp Real)
    -> SampleRate (Exp Real)
    -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
-> SampleRate (Exp Real)
-> Unwrapped
     (InputArg (Modulation Real) (Exp Real)
      -> (InputArg (Control (T RealValue)) (Exp Real),
          InputArg (Control (T (MultiValuesOf (Exp Real)))) (Exp Real))
      -> Arg Number (Exp Real)
      -> InputArg (Signal (Serial VectorSize Real)) (Exp Real)
      -> InputArg (Signal (Serial VectorSize Real)) (Exp Real)
      -> SampleRate (Exp Real)
      -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
forall a b. (a -> b) -> a -> b
$
       \(Modulation T (T (T RealValue))
fm) (Control T (T RealValue)
noiseAmp, Control T (T (MultiValuesOf (Exp Real)))
noiseReson)
         (Number Exp Real
vel) (Signal T (Serial VectorSize Real)
env4) (Signal T (Serial VectorSize Real)
env7) ->
       (SampleRate (Exp Real) -> Exp Real -> Exp Real)
-> Exp Real
-> (Exp Real
    -> SampleRate (Exp Real)
    -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
-> SampleRate (Exp Real)
-> T (Serial VectorSize 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 (Serial VectorSize Real) (T (T (T VectorSize Real))))
 -> SampleRate (Exp Real)
 -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
-> (Exp Real
    -> SampleRate (Exp Real)
    -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
-> SampleRate (Exp Real)
-> T (Serial VectorSize 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 (Serial VectorSize Real) (T (T (T VectorSize Real))))
-> SampleRate (Exp Real)
-> T (Serial VectorSize 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 (Serial VectorSize Real) (T (T (T VectorSize Real))))
 -> SampleRate (Exp Real)
 -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
-> (Exp Real
    -> SampleRate (Exp Real)
    -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
-> SampleRate (Exp Real)
-> T (Serial VectorSize Real) (T (T (T VectorSize Real)))
forall a b. (a -> b) -> a -> b
$ \Exp Real
speed SampleRate (Exp Real)
_sr ->
         (let osci ::
                 (Triple VectorValue -> VectorValue) ->
                 Exp Real ->
                 Exp Real ->
                 Causal.T (Triple VectorValue, VectorValue) VectorValue
              osci :: (Triple (Serial VectorSize Real) -> Serial VectorSize Real)
-> Exp Real
-> Exp Real
-> T (Triple (Serial VectorSize Real), Serial VectorSize Real)
     (Serial VectorSize Real)
osci Triple (Serial VectorSize Real) -> Serial VectorSize Real
sel Exp Real
v Exp Real
d =
                 T (Serial VectorSize Real, Serial VectorSize Real)
  (Serial VectorSize Real)
forall a. PseudoRing a => T (a, a) a
Causal.envelope
                 T (Serial VectorSize Real, Serial VectorSize Real)
  (Serial VectorSize Real)
-> T (Triple (Serial VectorSize Real), Serial VectorSize Real)
     (Serial VectorSize Real, Serial VectorSize Real)
-> T (Triple (Serial VectorSize Real), Serial VectorSize Real)
     (Serial VectorSize Real)
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
<<<
                 ((Triple (Serial VectorSize Real) -> Serial VectorSize Real)
-> T (Triple (Serial VectorSize Real)) (Serial VectorSize Real)
forall b c. (b -> c) -> T b c
forall (a :: * -> * -> *) b c. Arrow a => (b -> c) -> a b c
arr Triple (Serial VectorSize Real) -> Serial VectorSize Real
sel T (Triple (Serial VectorSize Real)) (Serial VectorSize Real)
-> T (Serial VectorSize Real) (Serial VectorSize Real)
-> T (Triple (Serial VectorSize Real), Serial VectorSize Real)
     (Serial VectorSize Real, Serial VectorSize Real)
forall b c b' c'. T b c -> T b' c' -> T (b, b') (c, c')
forall (a :: * -> * -> *) b c b' c'.
Arrow a =>
a b c -> a b' c' -> a (b, b') (c, c')
***
                    (Exp Real -> T (Serial VectorSize Real) (Serial VectorSize Real)
forall n a.
(Positive n, PseudoRing a) =>
Exp a -> T (Serial n a) (Serial n a)
CausalPS.amplify Exp Real
v
                     T (Serial VectorSize Real) (Serial VectorSize Real)
-> T (Serial VectorSize Real) (Serial VectorSize Real)
-> T (Serial VectorSize Real) (Serial VectorSize Real)
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
<<<
                     ((forall r.
 Serial VectorSize Real
 -> CodeGenFunction r (Serial VectorSize Real))
-> T (Serial VectorSize Real, Serial VectorSize Real)
     (Serial 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 Serial VectorSize Real
-> CodeGenFunction r (Serial VectorSize Real)
forall r.
Serial VectorSize Real
-> CodeGenFunction r (Serial VectorSize Real)
forall a r.
(PseudoRing a, RationalConstant a, Real a) =>
a -> CodeGenFunction r a
WaveL.approxSine4 T (Serial VectorSize Real, Serial VectorSize Real)
  (Serial VectorSize Real)
-> SignalOf T (Serial VectorSize Real)
-> T (Serial VectorSize Real) (Serial VectorSize Real)
forall (process :: * -> * -> *) a b c.
C process =>
process (a, b) c -> SignalOf process a -> process b c
$< SignalOf T (Serial VectorSize Real)
T (Serial VectorSize Real)
forall a. C a => a
zero)
                     T (Serial VectorSize Real) (Serial VectorSize Real)
-> T (Serial VectorSize Real) (Serial VectorSize Real)
-> T (Serial VectorSize Real) (Serial VectorSize Real)
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 (Serial VectorSize Real) (Serial VectorSize Real)
forall n a.
(Positive n, PseudoRing a) =>
Exp a -> T (Serial n a) (Serial n a)
CausalPS.amplify Exp Real
d))

              noise ::
                 (Triple VectorValue -> VectorValue) ->
                 Exp Real ->
                 Causal.T (Triple VectorValue, VectorValue) VectorValue
              noise :: (Triple (Serial VectorSize Real) -> Serial VectorSize Real)
-> Exp Real
-> T (Triple (Serial VectorSize Real), Serial VectorSize Real)
     (Serial VectorSize Real)
noise Triple (Serial VectorSize Real) -> Serial VectorSize Real
sel Exp Real
d =
                 (T (Serial VectorSize Real, Serial VectorSize Real)
  (Serial VectorSize Real)
forall a. PseudoRing a => T (a, a) a
Causal.envelope T (Serial VectorSize Real, Serial VectorSize Real)
  (Serial VectorSize Real)
-> SignalOf T (Serial VectorSize Real)
-> T (Serial VectorSize Real) (Serial VectorSize Real)
forall (process :: * -> * -> *) a b c.
C process =>
process (a, b) c -> SignalOf process a -> process b c
$< T (T RealValue) -> T (Serial VectorSize Real)
piecewiseConstantVector T (T RealValue)
noiseAmp)
                 T (Serial VectorSize Real) (Serial VectorSize Real)
-> T (Triple (Serial VectorSize Real), Serial VectorSize Real)
     (Serial VectorSize Real)
-> T (Triple (Serial VectorSize Real), Serial VectorSize Real)
     (Serial VectorSize Real)
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
<<<
                 T (Serial VectorSize Real, Serial VectorSize Real)
  (Serial VectorSize Real)
forall a. PseudoRing a => T (a, a) a
Causal.envelope
                 T (Serial VectorSize Real, Serial VectorSize Real)
  (Serial VectorSize Real)
-> T (Triple (Serial VectorSize Real), Serial VectorSize Real)
     (Serial VectorSize Real, Serial VectorSize Real)
-> T (Triple (Serial VectorSize Real), Serial VectorSize Real)
     (Serial VectorSize Real)
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
<<<
                 ((Triple (Serial VectorSize Real) -> Serial VectorSize Real)
-> T (Triple (Serial VectorSize Real)) (Serial VectorSize Real)
forall b c. (b -> c) -> T b c
forall (a :: * -> * -> *) b c. Arrow a => (b -> c) -> a b c
arr Triple (Serial VectorSize Real) -> Serial VectorSize Real
sel T (Triple (Serial VectorSize Real)) (Serial VectorSize Real)
-> T (Serial VectorSize Real) (Serial VectorSize Real)
-> T (Triple (Serial VectorSize Real), Serial VectorSize Real)
     (Serial VectorSize Real, Serial VectorSize Real)
forall b c b' c'. T b c -> T b' c' -> T (b, b') (c, c')
forall (a :: * -> * -> *) b c b' c'.
Arrow a =>
a b c -> a b' c' -> a (b, b') (c, c')
***
                    ({- UniFilter.lowpass
                        ^<< -}
                     (T (Parameter (Pos Dec8 EndDesc) (MultiValuesOf (Exp Real)),
   Serial VectorSize Real)
  (Serial VectorSize Real)
forall parameter a b. C parameter a b => T (parameter, a) b
CtrlPS.process T (Parameter (Pos Dec8 EndDesc) (MultiValuesOf (Exp Real)),
   Serial VectorSize Real)
  (Serial VectorSize Real)
-> SignalOf T (Serial VectorSize Real)
-> T (Parameter (Pos Dec8 EndDesc) (MultiValuesOf (Exp Real)))
     (Serial VectorSize Real)
forall (process :: * -> * -> *) a b c.
C process =>
process (a, b) c -> SignalOf process b -> process a c
$> Exp Word32 -> Exp Real -> T (Serial 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)
                     T (Parameter (Pos Dec8 EndDesc) (MultiValuesOf (Exp Real)))
  (Serial VectorSize Real)
-> T (Serial VectorSize Real)
     (Parameter (Pos Dec8 EndDesc) (MultiValuesOf (Exp Real)))
-> T (Serial VectorSize Real) (Serial VectorSize Real)
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
<<<
{-
                     (Causal.quantizeLift
                        (Causal.zipWith UniFilterL.parameter)
                        $<# (128 / fromIntegral vectorSize :: Real))
-}
                     (T (MultiValuesOf (Exp Real), RealValue)
  (Parameter (Pos Dec8 EndDesc) (MultiValuesOf (Exp Real)))
-> T (RealValue, (MultiValuesOf (Exp Real), RealValue))
     (Parameter (Pos Dec8 EndDesc) (MultiValuesOf (Exp 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 (Pos Dec8 EndDesc) (Exp Real))
-> T (MultiValuesOf (Exp Real), RealValue)
     (Parameter (Pos Dec8 EndDesc) (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 (Pos Dec8 EndDesc)
-> Exp Real -> Exp Real -> Parameter (Pos Dec8 EndDesc) (Exp Real)
forall n a. (Natural n, C a) => Proxy n -> a -> a -> Parameter n a
MoogL.parameter Proxy (Pos Dec8 EndDesc)
TypeNum.d8))
                        T (RealValue, (MultiValuesOf (Exp Real), RealValue))
  (Parameter (Pos Dec8 EndDesc) (MultiValuesOf (Exp Real)))
-> Real
-> T (MultiValuesOf (Exp Real), RealValue)
     (Parameter (Pos Dec8 EndDesc) (MultiValuesOf (Exp Real)))
forall (process :: * -> * -> *) a b c.
(C process, C a) =>
process (T a, b) c -> a -> process b c
$<# (Real
128 Real -> Real -> Real
forall a. Fractional a => a -> a -> a
/ Int -> Real
forall a b. (Integral a, Num b) => a -> b
fromIntegral Int
vectorSize :: Real))
                     T (MultiValuesOf (Exp Real), RealValue)
  (Parameter (Pos Dec8 EndDesc) (MultiValuesOf (Exp Real)))
-> T (Serial VectorSize Real) (MultiValuesOf (Exp Real), RealValue)
-> T (Serial VectorSize Real)
     (Parameter (Pos Dec8 EndDesc) (MultiValuesOf (Exp Real)))
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
<<<
                     SignalOf T (MultiValuesOf (Exp Real))
-> T RealValue (MultiValuesOf (Exp Real), RealValue)
forall (process :: * -> * -> *) a b.
C process =>
SignalOf process a -> process b (a, b)
CausalClass.feedFst (T (T (MultiValuesOf (Exp Real))) -> T (MultiValuesOf (Exp Real))
forall a. C a => T (T a) -> T a
piecewiseConstant T (T (MultiValuesOf (Exp Real)))
noiseReson)
                     T RealValue (MultiValuesOf (Exp Real), RealValue)
-> T (Serial VectorSize Real) RealValue
-> T (Serial VectorSize Real) (MultiValuesOf (Exp Real), RealValue)
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)
-> T (Serial VectorSize Real) RealValue
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 (Serial VectorSize Real) RealValue
-> T (Serial VectorSize Real) (Serial VectorSize Real)
-> T (Serial VectorSize Real) RealValue
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 (Serial VectorSize Real) (Serial VectorSize Real)
forall n a.
(Positive n, PseudoRing a) =>
Exp a -> T (Serial n a) (Serial n a)
CausalPS.amplify Exp Real
d))
          in  (Serial VectorSize Real
 -> Serial VectorSize Real -> T (T (T VectorSize Real)))
-> T (Triple (Serial VectorSize Real), Serial VectorSize Real)
     (Serial VectorSize Real)
-> T (Triple (Serial VectorSize Real), Serial VectorSize Real)
     (Serial VectorSize Real)
-> T (Triple (Serial VectorSize Real), Serial VectorSize Real)
     (T (T (T VectorSize Real)))
forall a b c.
(a -> b -> c)
-> T (Triple (Serial VectorSize Real), Serial VectorSize Real) a
-> T (Triple (Serial VectorSize Real), Serial VectorSize Real) b
-> T (Triple (Serial VectorSize Real), Serial VectorSize Real) c
forall (f :: * -> *) a b c.
Applicative f =>
(a -> b -> c) -> f a -> f b -> f c
liftA2 Serial VectorSize Real
-> Serial VectorSize Real -> T (T (T VectorSize Real))
forall a. T a -> T a -> T (T a)
Stereo.consMultiValue
                 ([T (Triple (Serial VectorSize Real), Serial VectorSize Real)
   (Serial VectorSize Real)]
-> T (Triple (Serial VectorSize Real), Serial VectorSize Real)
     (Serial VectorSize Real)
forall a. C a => [a] -> a
sumNested
                    [(Triple (Serial VectorSize Real) -> Serial VectorSize Real)
-> Exp Real
-> Exp Real
-> T (Triple (Serial VectorSize Real), Serial VectorSize Real)
     (Serial VectorSize Real)
osci Triple (Serial VectorSize Real) -> Serial VectorSize Real
forall a b c. (a, b, c) -> a
fst3  Exp Real
0.6              (Exp Real
1Exp Real -> Exp Real -> Exp Real
forall a. C a => a -> a -> a
*Exp Real
0.999),
                     (Triple (Serial VectorSize Real) -> Serial VectorSize Real)
-> Exp Real
-> Exp Real
-> T (Triple (Serial VectorSize Real), Serial VectorSize Real)
     (Serial VectorSize Real)
osci Triple (Serial VectorSize Real) -> Serial VectorSize Real
forall a b c. (a, b, c) -> b
snd3 (Exp Real
0.02 Exp Real -> Exp Real -> Exp Real
forall a. C a => a -> a -> a
*  Exp Real
50Exp Real -> Exp Real -> Exp Real
forall a. C a => a -> a -> a
^?Exp Real
vel) (Exp Real
4Exp Real -> Exp Real -> Exp Real
forall a. C a => a -> a -> a
*Exp Real
0.999),
                     (Triple (Serial VectorSize Real) -> Serial VectorSize Real)
-> Exp Real
-> Exp Real
-> T (Triple (Serial VectorSize Real), Serial VectorSize Real)
     (Serial VectorSize Real)
osci Triple (Serial VectorSize Real) -> Serial VectorSize Real
forall a b c. (a, b, c) -> c
thd3 (Exp Real
0.02 Exp Real -> Exp Real -> Exp Real
forall a. C a => a -> a -> a
* Exp Real
100Exp Real -> Exp Real -> Exp Real
forall a. C a => a -> a -> a
^?Exp Real
vel) (Exp Real
7Exp Real -> Exp Real -> Exp Real
forall a. C a => a -> a -> a
*Exp Real
0.999),
                     (Triple (Serial VectorSize Real) -> Serial VectorSize Real)
-> Exp Real
-> T (Triple (Serial VectorSize Real), Serial VectorSize Real)
     (Serial VectorSize Real)
noise Triple (Serial VectorSize Real) -> Serial VectorSize Real
forall a b c. (a, b, c) -> a
fst3 Exp Real
0.999])
                 ([T (Triple (Serial VectorSize Real), Serial VectorSize Real)
   (Serial VectorSize Real)]
-> T (Triple (Serial VectorSize Real), Serial VectorSize Real)
     (Serial VectorSize Real)
forall a. C a => [a] -> a
sumNested
                    [(Triple (Serial VectorSize Real) -> Serial VectorSize Real)
-> Exp Real
-> Exp Real
-> T (Triple (Serial VectorSize Real), Serial VectorSize Real)
     (Serial VectorSize Real)
osci Triple (Serial VectorSize Real) -> Serial VectorSize Real
forall a b c. (a, b, c) -> a
fst3  Exp Real
0.6              (Exp Real
1Exp Real -> Exp Real -> Exp Real
forall a. C a => a -> a -> a
*Exp Real
1.001),
                     (Triple (Serial VectorSize Real) -> Serial VectorSize Real)
-> Exp Real
-> Exp Real
-> T (Triple (Serial VectorSize Real), Serial VectorSize Real)
     (Serial VectorSize Real)
osci Triple (Serial VectorSize Real) -> Serial VectorSize Real
forall a b c. (a, b, c) -> b
snd3 (Exp Real
0.02 Exp Real -> Exp Real -> Exp Real
forall a. C a => a -> a -> a
*  Exp Real
50Exp Real -> Exp Real -> Exp Real
forall a. C a => a -> a -> a
^?Exp Real
vel) (Exp Real
4Exp Real -> Exp Real -> Exp Real
forall a. C a => a -> a -> a
*Exp Real
1.001),
                     (Triple (Serial VectorSize Real) -> Serial VectorSize Real)
-> Exp Real
-> Exp Real
-> T (Triple (Serial VectorSize Real), Serial VectorSize Real)
     (Serial VectorSize Real)
osci Triple (Serial VectorSize Real) -> Serial VectorSize Real
forall a b c. (a, b, c) -> c
thd3 (Exp Real
0.02 Exp Real -> Exp Real -> Exp Real
forall a. C a => a -> a -> a
* Exp Real
100Exp Real -> Exp Real -> Exp Real
forall a. C a => a -> a -> a
^?Exp Real
vel) (Exp Real
7Exp Real -> Exp Real -> Exp Real
forall a. C a => a -> a -> a
*Exp Real
1.001),
                     (Triple (Serial VectorSize Real) -> Serial VectorSize Real)
-> Exp Real
-> T (Triple (Serial VectorSize Real), Serial VectorSize Real)
     (Serial VectorSize Real)
noise Triple (Serial VectorSize Real) -> Serial VectorSize Real
forall a b c. (a, b, c) -> a
fst3 Exp Real
1.001])
              T (Triple (Serial VectorSize Real), Serial VectorSize Real)
  (T (T (T VectorSize Real)))
-> T (Serial VectorSize Real,
      (Serial VectorSize Real, Serial VectorSize Real))
     (Triple (Serial VectorSize Real), Serial VectorSize Real)
-> T (Serial VectorSize Real,
      (Serial VectorSize Real, Serial VectorSize Real))
     (T (T (T VectorSize Real)))
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
<<<
              SignalOf T (Serial VectorSize Real)
-> T (Triple (Serial VectorSize Real))
     (Triple (Serial VectorSize Real), Serial VectorSize Real)
forall (process :: * -> * -> *) a b.
C process =>
SignalOf process a -> process b (b, a)
CausalClass.feedSnd (Exp Real -> T (T (T RealValue)) -> T (Serial VectorSize Real)
frequencyFromBendModulation Exp Real
speed T (T (T RealValue))
fm)
              T (Triple (Serial VectorSize Real))
  (Triple (Serial VectorSize Real), Serial VectorSize Real)
-> T (Serial VectorSize Real,
      (Serial VectorSize Real, Serial VectorSize Real))
     (Triple (Serial VectorSize Real))
-> T (Serial VectorSize Real,
      (Serial VectorSize Real, Serial VectorSize Real))
     (Triple (Serial VectorSize Real), Serial VectorSize Real)
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
<<<
              ((Serial VectorSize Real,
  (Serial VectorSize Real, Serial VectorSize Real))
 -> Triple (Serial VectorSize Real))
-> T (Serial VectorSize Real,
      (Serial VectorSize Real, Serial VectorSize Real))
     (Triple (Serial VectorSize Real))
forall b c. (b -> c) -> T b c
forall (a :: * -> * -> *) b c. Arrow a => (b -> c) -> a b c
arr (\(Serial VectorSize Real
e1,(Serial VectorSize Real
e4,Serial VectorSize Real
e7)) -> (Serial VectorSize Real
e1,Serial VectorSize Real
e4,Serial VectorSize Real
e7))
               T (Serial VectorSize Real,
   (Serial VectorSize Real, Serial VectorSize Real))
  (T (T (T VectorSize Real)))
-> SignalOf T (Serial VectorSize Real, Serial VectorSize Real)
-> T (Serial VectorSize Real) (T (T (T VectorSize Real)))
forall (process :: * -> * -> *) a b c.
C process =>
process (a, b) c -> SignalOf process b -> process a c
$> {-
                  Be careful, those storable vectors shorten the whole sound
                  if they have shorter release than the main envelope.
                  -}
                  (Serial VectorSize Real
 -> Serial VectorSize Real
 -> (Serial VectorSize Real, Serial VectorSize Real))
-> T (Serial VectorSize Real)
-> T (Serial VectorSize Real)
-> T (Serial VectorSize Real, Serial VectorSize Real)
forall a b c. (a -> b -> c) -> T a -> T b -> T c
forall (f :: * -> *) a b c.
Applicative f =>
(a -> b -> c) -> f a -> f b -> f c
liftA2 (,) T (Serial VectorSize Real)
env4 T (Serial VectorSize Real)
env7))
      IO
  (Real
   -> Real
   -> ChunkSize
   -> SampleRate Real
   -> Real
   -> LazyTime
   -> Vector (T VectorSize Real))
pingReleaseEnvelope


tine :: IO (Real -> Real -> SigSt.ChunkSize -> Instrument Real Vector)
tine :: IO
  (Real -> Real -> ChunkSize -> Instrument Real (T VectorSize Real))
tine =
   ((SampleRate Real
  -> Real
  -> Real
  -> T (Vector (T VectorSize Real)) (Vector (T VectorSize Real)))
 -> (Real
     -> Real
     -> ChunkSize
     -> SampleRate Real
     -> Real
     -> LazyTime
     -> Vector (T VectorSize Real))
 -> Real
 -> Real
 -> ChunkSize
 -> Instrument Real (T VectorSize Real))
-> IO
     (SampleRate Real
      -> Real
      -> Real
      -> T (Vector (T VectorSize Real)) (Vector (T VectorSize Real)))
-> IO
     (Real
      -> Real
      -> ChunkSize
      -> SampleRate Real
      -> Real
      -> LazyTime
      -> Vector (T VectorSize Real))
-> IO
     (Real -> Real -> ChunkSize -> Instrument Real (T VectorSize Real))
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 (Vector (T VectorSize Real)) (Vector (T VectorSize Real))
osc Real
-> Real
-> ChunkSize
-> SampleRate Real
-> Real
-> LazyTime
-> Vector (T VectorSize Real)
env Real
dec Real
rel ChunkSize
vcsize SampleRate Real
sr Real
vel Real
freq LazyTime
dur ->
         T (Vector (T VectorSize Real)) (Vector (T VectorSize Real))
-> Vector (T VectorSize Real) -> Vector (T VectorSize Real)
forall a b.
(Storable a, Storable b) =>
T (Vector a) (Vector b) -> Vector a -> Vector b
pioApply (SampleRate Real
-> Real
-> Real
-> T (Vector (T VectorSize Real)) (Vector (T VectorSize Real))
osc SampleRate Real
sr Real
vel Real
freq) (Real
-> Real
-> ChunkSize
-> SampleRate Real
-> Real
-> LazyTime
-> Vector (T VectorSize Real)
env Real
dec Real
rel ChunkSize
vcsize SampleRate Real
sr Real
0 LazyTime
dur))
      (DSL
  (SampleRate Real
   -> Real
   -> Real
   -> T (Vector (T VectorSize Real)) (Vector (T VectorSize Real)))
  (Element
     (In
        (SampleRate Real
         -> Real
         -> Real
         -> T (Vector (T VectorSize Real)) (Vector (T VectorSize Real)))))
  (Element
     (Out
        (SampleRate Real
         -> Real
         -> Real
         -> T (Vector (T VectorSize Real)) (Vector (T VectorSize Real)))))
-> IO
     (SampleRate Real
      -> Real
      -> Real
      -> T (Vector (T VectorSize Real)) (Vector (T VectorSize Real)))
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 (T VectorSize Real)) (Vector (T VectorSize Real)))
   (Element
      (In
         (SampleRate Real
          -> Real
          -> Real
          -> T (Vector (T VectorSize Real)) (Vector (T VectorSize Real)))))
   (Element
      (Out
         (SampleRate Real
          -> Real
          -> Real
          -> T (Vector (T VectorSize Real)) (Vector (T VectorSize Real)))))
 -> IO
      (SampleRate Real
       -> Real
       -> Real
       -> T (Vector (T VectorSize Real)) (Vector (T VectorSize Real))))
-> DSL
     (SampleRate Real
      -> Real
      -> Real
      -> T (Vector (T VectorSize Real)) (Vector (T VectorSize Real)))
     (Element
        (In
           (SampleRate Real
            -> Real
            -> Real
            -> T (Vector (T VectorSize Real)) (Vector (T VectorSize Real)))))
     (Element
        (Out
           (SampleRate Real
            -> Real
            -> Real
            -> T (Vector (T VectorSize Real)) (Vector (T VectorSize Real)))))
-> IO
     (SampleRate Real
      -> Real
      -> Real
      -> T (Vector (T VectorSize Real)) (Vector (T VectorSize Real)))
forall a b. (a -> b) -> a -> b
$
       (Arg Number (Exp Real)
 -> Arg Frequency (Exp Real)
 -> SampleRate (Exp Real)
 -> T (Serial VectorSize Real) (Serial VectorSize Real))
-> SampleRate (Exp Real)
-> Unwrapped
     (Arg Number (Exp Real)
      -> Arg Frequency (Exp Real)
      -> SampleRate (Exp Real)
      -> T (Serial VectorSize Real) (Serial 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 (Serial VectorSize Real) (Serial VectorSize Real))
 -> SampleRate (Exp Real)
 -> Unwrapped
      (Arg Number (Exp Real)
       -> Arg Frequency (Exp Real)
       -> SampleRate (Exp Real)
       -> T (Serial VectorSize Real) (Serial VectorSize Real)))
-> (Arg Number (Exp Real)
    -> Arg Frequency (Exp Real)
    -> SampleRate (Exp Real)
    -> T (Serial VectorSize Real) (Serial VectorSize Real))
-> SampleRate (Exp Real)
-> Unwrapped
     (Arg Number (Exp Real)
      -> Arg Frequency (Exp Real)
      -> SampleRate (Exp Real)
      -> T (Serial VectorSize Real) (Serial 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 (Serial VectorSize Real) (Serial VectorSize Real))
-> SampleRate (Exp Real)
-> T (Serial VectorSize Real) (Serial 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 (Serial VectorSize Real) (Serial VectorSize Real))
 -> SampleRate (Exp Real)
 -> T (Serial VectorSize Real) (Serial VectorSize Real))
-> (Exp Real
    -> SampleRate (Exp Real)
    -> T (Serial VectorSize Real) (Serial VectorSize Real))
-> SampleRate (Exp Real)
-> T (Serial VectorSize Real) (Serial VectorSize Real)
forall a b. (a -> b) -> a -> b
$ \Exp Real
halfLife SampleRate (Exp Real)
_sr ->
         (T (Serial VectorSize Real, Serial VectorSize Real)
  (Serial VectorSize Real)
forall a. PseudoRing a => T (a, a) a
Causal.envelope T (Serial VectorSize Real, Serial VectorSize Real)
  (Serial VectorSize Real)
-> SignalOf T (Serial VectorSize Real)
-> T (Serial VectorSize Real) (Serial VectorSize Real)
forall (process :: * -> * -> *) a b c.
C process =>
process (a, b) c -> SignalOf process b -> process a c
$>
            ((forall r.
 Serial VectorSize Real
 -> CodeGenFunction r (Serial VectorSize Real))
-> T (Serial VectorSize Real, Serial VectorSize Real)
     (Serial 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 Serial VectorSize Real
-> CodeGenFunction r (Serial VectorSize Real)
forall r.
Serial VectorSize Real
-> CodeGenFunction r (Serial VectorSize Real)
forall a r.
(PseudoRing a, IntegerConstant a, Fraction a) =>
a -> CodeGenFunction r a
WaveL.approxSine2
               T (Serial VectorSize Real, Serial VectorSize Real)
  (Serial VectorSize Real)
-> SignalOf T (Serial VectorSize Real)
-> T (Serial VectorSize Real) (Serial VectorSize Real)
forall (process :: * -> * -> *) a b c.
C process =>
process (a, b) c -> SignalOf process b -> process a c
$> Exp Real -> T (Serial VectorSize Real)
forall n a. Vector n a => Exp a -> T (Serial n a)
SigPS.constant Exp Real
freq
               T (Serial VectorSize Real) (Serial VectorSize Real)
-> SignalOf T (Serial VectorSize Real)
-> SignalOf T (Serial VectorSize Real)
forall (process :: * -> * -> *) a b.
C process =>
process a b -> SignalOf process a -> SignalOf process b
$* (T (Serial VectorSize Real, Serial VectorSize Real)
  (Serial VectorSize Real)
forall a. PseudoRing a => T (a, a) a
Causal.envelope
                     T (Serial VectorSize Real, Serial VectorSize Real)
  (Serial VectorSize Real)
-> SignalOf T (Serial VectorSize Real)
-> T (Serial VectorSize Real) (Serial VectorSize Real)
forall (process :: * -> * -> *) a b c.
C process =>
process (a, b) c -> SignalOf process a -> process b c
$< Exp Real -> Exp Real -> T (Serial 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
velExp Real -> Exp Real -> Exp Real
forall a. C a => a -> a -> a
+Exp Real
1)
                     T (Serial VectorSize Real) (Serial VectorSize Real)
-> SignalOf T (Serial VectorSize Real)
-> SignalOf T (Serial VectorSize Real)
forall (process :: * -> * -> *) a b.
C process =>
process a b -> SignalOf process a -> SignalOf process b
$* (forall r.
 Serial VectorSize Real
 -> CodeGenFunction r (Serial VectorSize Real))
-> Exp Real -> Exp Real -> T (Serial 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 Serial VectorSize Real
-> CodeGenFunction r (Serial VectorSize Real)
forall r.
Serial VectorSize Real
-> CodeGenFunction r (Serial VectorSize Real)
forall a r.
(PseudoRing a, IntegerConstant a, Fraction a) =>
a -> CodeGenFunction r a
WaveL.approxSine2 Exp Real
forall a. C a => a
zero (Exp Real
2Exp Real -> Exp Real -> Exp Real
forall a. C a => a -> a -> a
*Exp Real
freq)))))
      IO
  (Real
   -> Real
   -> ChunkSize
   -> SampleRate Real
   -> Real
   -> LazyTime
   -> Vector (T VectorSize Real))
pingReleaseEnvelope

tineStereo ::
   IO (Real -> Real -> SigSt.ChunkSize -> Instrument Real (Stereo.T Vector))
tineStereo :: IO
  (Real
   -> Real -> ChunkSize -> Instrument Real (T (T VectorSize Real)))
tineStereo =
   ((SampleRate Real
  -> Real
  -> Real
  -> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real))))
 -> (Real
     -> Real
     -> ChunkSize
     -> SampleRate Real
     -> Real
     -> LazyTime
     -> Vector (T VectorSize Real))
 -> Real
 -> Real
 -> ChunkSize
 -> Instrument Real (T (T VectorSize Real)))
-> IO
     (SampleRate Real
      -> Real
      -> Real
      -> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real))))
-> IO
     (Real
      -> Real
      -> ChunkSize
      -> SampleRate Real
      -> Real
      -> LazyTime
      -> Vector (T VectorSize Real))
-> IO
     (Real
      -> Real -> ChunkSize -> Instrument Real (T (T VectorSize Real)))
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 (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real)))
osc Real
-> Real
-> ChunkSize
-> SampleRate Real
-> Real
-> LazyTime
-> Vector (T VectorSize Real)
env Real
dec Real
rel ChunkSize
vcsize SampleRate Real
sr Real
vel Real
freq LazyTime
dur ->
         T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real)))
-> Vector (T VectorSize Real) -> T (T (T VectorSize Real))
forall a b.
(Storable a, Storable b) =>
T (Vector a) (Vector b) -> Vector a -> Vector b
pioApply (SampleRate Real
-> Real
-> Real
-> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real)))
osc SampleRate Real
sr Real
vel Real
freq) (Real
-> Real
-> ChunkSize
-> SampleRate Real
-> Real
-> LazyTime
-> Vector (T VectorSize Real)
env Real
dec Real
rel ChunkSize
vcsize SampleRate Real
sr Real
0 LazyTime
dur))
      (DSL
  (SampleRate Real
   -> Real
   -> Real
   -> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real))))
  (Element
     (In
        (SampleRate Real
         -> Real
         -> Real
         -> T (Vector (T VectorSize Real))
              (Vector (T (T VectorSize Real))))))
  (Element
     (Out
        (SampleRate Real
         -> Real
         -> Real
         -> T (Vector (T VectorSize Real))
              (Vector (T (T VectorSize Real))))))
-> IO
     (SampleRate Real
      -> Real
      -> Real
      -> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real))))
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 (T VectorSize Real)) (Vector (T (T VectorSize Real))))
   (Element
      (In
         (SampleRate Real
          -> Real
          -> Real
          -> T (Vector (T VectorSize Real))
               (Vector (T (T VectorSize Real))))))
   (Element
      (Out
         (SampleRate Real
          -> Real
          -> Real
          -> T (Vector (T VectorSize Real))
               (Vector (T (T VectorSize Real))))))
 -> IO
      (SampleRate Real
       -> Real
       -> Real
       -> T (Vector (T VectorSize Real))
            (Vector (T (T VectorSize Real)))))
-> DSL
     (SampleRate Real
      -> Real
      -> Real
      -> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real))))
     (Element
        (In
           (SampleRate Real
            -> Real
            -> Real
            -> T (Vector (T VectorSize Real))
                 (Vector (T (T VectorSize Real))))))
     (Element
        (Out
           (SampleRate Real
            -> Real
            -> Real
            -> T (Vector (T VectorSize Real))
                 (Vector (T (T VectorSize Real))))))
-> IO
     (SampleRate Real
      -> Real
      -> Real
      -> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real))))
forall a b. (a -> b) -> a -> b
$
       (Arg Number (Exp Real)
 -> Arg Frequency (Exp Real)
 -> SampleRate (Exp Real)
 -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
-> SampleRate (Exp Real)
-> Unwrapped
     (Arg Number (Exp Real)
      -> Arg Frequency (Exp Real)
      -> SampleRate (Exp Real)
      -> T (Serial VectorSize Real) (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 (Serial VectorSize Real) (T (T (T VectorSize Real))))
 -> SampleRate (Exp Real)
 -> Unwrapped
      (Arg Number (Exp Real)
       -> Arg Frequency (Exp Real)
       -> SampleRate (Exp Real)
       -> T (Serial VectorSize Real) (T (T (T VectorSize Real)))))
-> (Arg Number (Exp Real)
    -> Arg Frequency (Exp Real)
    -> SampleRate (Exp Real)
    -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
-> SampleRate (Exp Real)
-> Unwrapped
     (Arg Number (Exp Real)
      -> Arg Frequency (Exp Real)
      -> SampleRate (Exp Real)
      -> T (Serial VectorSize Real) (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 (Serial VectorSize Real) (T (T (T VectorSize Real))))
-> SampleRate (Exp Real)
-> T (Serial VectorSize 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 (Serial VectorSize Real) (T (T (T VectorSize Real))))
 -> SampleRate (Exp Real)
 -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
-> (Exp Real
    -> SampleRate (Exp Real)
    -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
-> SampleRate (Exp Real)
-> T (Serial VectorSize Real) (T (T (T VectorSize Real)))
forall a b. (a -> b) -> a -> b
$ \Exp Real
halfLife SampleRate (Exp Real)
_sr ->
         (let chanOsci :: Exp Real -> T (Serial VectorSize Real) (Serial VectorSize Real)
chanOsci Exp Real
d =
                 (forall r.
 Serial VectorSize Real
 -> CodeGenFunction r (Serial VectorSize Real))
-> T (Serial VectorSize Real, Serial VectorSize Real)
     (Serial 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 Serial VectorSize Real
-> CodeGenFunction r (Serial VectorSize Real)
forall r.
Serial VectorSize Real
-> CodeGenFunction r (Serial VectorSize Real)
forall a r.
(PseudoRing a, IntegerConstant a, Fraction a) =>
a -> CodeGenFunction r a
WaveL.approxSine2 T (Serial VectorSize Real, Serial VectorSize Real)
  (Serial VectorSize Real)
-> SignalOf T (Serial VectorSize Real)
-> T (Serial VectorSize Real) (Serial VectorSize Real)
forall (process :: * -> * -> *) a b c.
C process =>
process (a, b) c -> SignalOf process b -> process a c
$> Exp Real -> T (Serial VectorSize Real)
forall n a. Vector n a => Exp a -> T (Serial n a)
SigPS.constant (Exp Real
freqExp Real -> Exp Real -> Exp Real
forall a. C a => a -> a -> a
*Exp Real
d)
          in T (Serial VectorSize Real) -> T (T (T VectorSize Real))
forall a. T (T a) -> T (T a)
Stereo.multiValue (T (Serial VectorSize Real) -> T (T (T VectorSize Real)))
-> T (Serial VectorSize Real, T (Serial VectorSize Real))
     (T (Serial VectorSize Real))
-> T (Serial VectorSize Real, T (Serial VectorSize Real))
     (T (T (T VectorSize Real)))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$>
             T (Serial VectorSize Real, T (Serial VectorSize Real))
  (T (Serial VectorSize Real))
forall a. PseudoRing a => T (a, T a) (T a)
Causal.envelopeStereo T (Serial VectorSize Real, T (Serial VectorSize Real))
  (T (T (T VectorSize Real)))
-> SignalOf T (T (Serial VectorSize Real))
-> T (Serial VectorSize Real) (T (T (T VectorSize Real)))
forall (process :: * -> * -> *) a b c.
C process =>
process (a, b) c -> SignalOf process b -> process a c
$>
               ((Serial VectorSize Real
 -> Serial VectorSize Real -> T (Serial VectorSize Real))
-> T (Serial VectorSize Real) (Serial VectorSize Real)
-> T (Serial VectorSize Real) (Serial VectorSize Real)
-> T (Serial VectorSize Real) (T (Serial VectorSize Real))
forall a b c.
(a -> b -> c)
-> T (Serial VectorSize Real) a
-> T (Serial VectorSize Real) b
-> T (Serial VectorSize Real) c
forall (f :: * -> *) a b c.
Applicative f =>
(a -> b -> c) -> f a -> f b -> f c
liftA2 Serial VectorSize Real
-> Serial VectorSize Real -> T (Serial VectorSize Real)
forall a. a -> a -> T a
Stereo.cons (Exp Real -> T (Serial VectorSize Real) (Serial VectorSize Real)
chanOsci Exp Real
0.995) (Exp Real -> T (Serial VectorSize Real) (Serial VectorSize Real)
chanOsci Exp Real
1.005)
                  T (Serial VectorSize Real) (T (Serial VectorSize Real))
-> SignalOf T (Serial VectorSize Real)
-> SignalOf T (T (Serial VectorSize Real))
forall (process :: * -> * -> *) a b.
C process =>
process a b -> SignalOf process a -> SignalOf process b
$* (Exp Real -> Exp Real -> T (Serial 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
velExp Real -> Exp Real -> Exp Real
forall a. C a => a -> a -> a
+Exp Real
1) T (Serial VectorSize Real)
-> T (Serial VectorSize Real) -> T (Serial VectorSize Real)
forall a. C a => a -> a -> a
*
                      (forall r.
 Serial VectorSize Real
 -> CodeGenFunction r (Serial VectorSize Real))
-> Exp Real -> Exp Real -> T (Serial 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 Serial VectorSize Real
-> CodeGenFunction r (Serial VectorSize Real)
forall r.
Serial VectorSize Real
-> CodeGenFunction r (Serial VectorSize Real)
forall a r.
(PseudoRing a, IntegerConstant a, Fraction a) =>
a -> CodeGenFunction r a
WaveL.approxSine2 Exp Real
forall a. C a => a
zero (Exp Real
2Exp Real -> Exp Real -> Exp Real
forall a. C a => a -> a -> a
*Exp Real
freq)))))
      IO
  (Real
   -> Real
   -> ChunkSize
   -> SampleRate Real
   -> Real
   -> LazyTime
   -> Vector (T VectorSize Real))
pingReleaseEnvelope


softStringReleaseEnvelope ::
   IO (Real -> SampleRate Real -> Real -> Ev.LazyTime -> SigSt.T Vector)
softStringReleaseEnvelope :: IO
  (Real
   -> SampleRate Real
   -> Real
   -> LazyTime
   -> Vector (T VectorSize Real))
softStringReleaseEnvelope =
   ((Vector (T VectorSize Real) -> Vector (T VectorSize Real))
 -> (SampleRate Real
     -> Real -> Word -> T LazySize (Vector (T VectorSize Real)))
 -> Real
 -> SampleRate Real
 -> Real
 -> LazyTime
 -> Vector (T VectorSize Real))
-> IO (Vector (T VectorSize Real) -> Vector (T VectorSize Real))
-> IO
     (SampleRate Real
      -> Real -> Word -> T LazySize (Vector (T VectorSize Real)))
-> IO
     (Real
      -> SampleRate Real
      -> Real
      -> LazyTime
      -> Vector (T VectorSize Real))
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
      (\Vector (T VectorSize Real) -> Vector (T VectorSize Real)
rev SampleRate Real
-> Real -> Word -> T LazySize (Vector (T VectorSize Real))
env Real
attackTime SampleRate Real
sr Real
vel LazyTime
dur ->
         let attackTimeVector :: Word
             attackTimeVector :: Word
attackTimeVector = Real -> Word
forall b. C b => Real -> b
forall a b. (C a, C b) => a -> b
round (Real
attackTime Real -> Real -> Real
forall a. C a => a -> a -> a
* SampleRate Real -> Real
forall a. C a => SampleRate a -> a
vectorRate SampleRate Real
sr)
             {-
             release <- take attackTime beginning
             would yield a space leak, thus we first split 'beginning'
             and then concatenate it again
             -}
             {-
             We can not easily generate attack and sustain separately,
             because we want to use the chunk structure implied by 'dur'.
             -}
             (Vector (T VectorSize Real)
attack, Vector (T VectorSize Real)
sustain) =
                Int
-> Vector (T VectorSize Real)
-> (Vector (T VectorSize Real), Vector (T VectorSize Real))
forall a. Storable a => Int -> Vector a -> (Vector a, Vector a)
SigSt.splitAt (Word -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral Word
attackTimeVector) (Vector (T VectorSize Real)
 -> (Vector (T VectorSize Real), Vector (T VectorSize Real)))
-> Vector (T VectorSize Real)
-> (Vector (T VectorSize Real), Vector (T VectorSize Real))
forall a b. (a -> b) -> a -> b
$
                T LazySize (Vector (T VectorSize Real))
-> LazyTime -> Vector (T VectorSize Real)
forall b.
Storable b =>
T LazySize (Vector b) -> LazyTime -> Vector b
pioApplyToLazyTime
                  (SampleRate Real
-> Real -> Word -> T LazySize (Vector (T VectorSize Real))
env SampleRate Real
sr (Real -> Real
forall a. C a => a -> a
amplitudeFromVelocity Real
vel) Word
attackTimeVector)
                  LazyTime
dur
             release :: Vector (T VectorSize Real)
release = Vector (T VectorSize Real) -> Vector (T VectorSize Real)
rev Vector (T VectorSize Real)
attack
         in  Vector (T VectorSize Real)
attack Vector (T VectorSize Real)
-> Vector (T VectorSize Real) -> Vector (T VectorSize Real)
forall a. Semigroup a => a -> a -> a
<> Vector (T VectorSize Real)
sustain Vector (T VectorSize Real)
-> Vector (T VectorSize Real) -> Vector (T VectorSize Real)
forall a. Semigroup a => a -> a -> a
<> Vector (T VectorSize Real)
release)
      IO (Vector (T VectorSize Real) -> Vector (T VectorSize Real))
forall n a v.
(Positive n, Vector a, v ~ T n a) =>
IO (Vector v -> Vector v)
SigStL.makeReversePacked
      (DSL
  (SampleRate Real
   -> Real -> Word -> T LazySize (Vector (T VectorSize Real)))
  (Element
     (In
        (SampleRate Real
         -> Real -> Word -> T LazySize (Vector (T VectorSize Real)))))
  (Element
     (Out
        (SampleRate Real
         -> Real -> Word -> T LazySize (Vector (T VectorSize Real)))))
-> IO
     (SampleRate Real
      -> Real -> Word -> T LazySize (Vector (T VectorSize Real)))
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 -> Word -> T LazySize (Vector (T VectorSize Real)))
   (Element
      (In
         (SampleRate Real
          -> Real -> Word -> T LazySize (Vector (T VectorSize Real)))))
   (Element
      (Out
         (SampleRate Real
          -> Real -> Word -> T LazySize (Vector (T VectorSize Real)))))
 -> IO
      (SampleRate Real
       -> Real -> Word -> T LazySize (Vector (T VectorSize Real))))
-> DSL
     (SampleRate Real
      -> Real -> Word -> T LazySize (Vector (T VectorSize Real)))
     (Element
        (In
           (SampleRate Real
            -> Real -> Word -> T LazySize (Vector (T VectorSize Real)))))
     (Element
        (Out
           (SampleRate Real
            -> Real -> Word -> T LazySize (Vector (T VectorSize Real)))))
-> IO
     (SampleRate Real
      -> Real -> Word -> T LazySize (Vector (T VectorSize Real)))
forall a b. (a -> b) -> a -> b
$
       (Arg Number (Exp Real)
 -> InputArg (Parameter (Exp Word)) (Exp Real)
 -> SampleRate (Exp Real)
 -> T () (Serial VectorSize Real))
-> SampleRate (Exp Real)
-> Unwrapped
     (Arg Number (Exp Real)
      -> InputArg (Parameter (Exp Word)) (Exp Real)
      -> SampleRate (Exp Real)
      -> T () (Serial VectorSize Real))
forall a f. Wrapped a f => f -> SampleRate a -> Unwrapped f
wrapped ((Arg Number (Exp Real)
  -> InputArg (Parameter (Exp Word)) (Exp Real)
  -> SampleRate (Exp Real)
  -> T () (Serial VectorSize Real))
 -> SampleRate (Exp Real)
 -> Unwrapped
      (Arg Number (Exp Real)
       -> InputArg (Parameter (Exp Word)) (Exp Real)
       -> SampleRate (Exp Real)
       -> T () (Serial VectorSize Real)))
-> (Arg Number (Exp Real)
    -> InputArg (Parameter (Exp Word)) (Exp Real)
    -> SampleRate (Exp Real)
    -> T () (Serial VectorSize Real))
-> SampleRate (Exp Real)
-> Unwrapped
     (Arg Number (Exp Real)
      -> InputArg (Parameter (Exp Word)) (Exp Real)
      -> SampleRate (Exp Real)
      -> T () (Serial VectorSize Real))
forall a b. (a -> b) -> a -> b
$ \(Number Exp Real
amp) (Parameter Exp Word
attackTimeVector) (SampleRate Exp Real
_sr) ->
       SignalOf T (Serial VectorSize Real)
-> T () (Serial 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 (Serial VectorSize Real)
 -> T () (Serial VectorSize Real))
-> SignalOf T (Serial VectorSize Real)
-> T () (Serial VectorSize Real)
forall a b. (a -> b) -> a -> b
$
           (SignalOf T (Serial VectorSize Real)
-> SignalOf T (Serial VectorSize Real)
-> SignalOf T (Serial VectorSize Real)
forall a. Semigroup a => a -> a -> a
<> Exp Real -> T (Serial VectorSize Real)
forall n a. Vector n a => Exp a -> T (Serial n a)
SigPS.constant Exp Real
amp) (SignalOf T (Serial VectorSize Real)
 -> SignalOf T (Serial VectorSize Real))
-> SignalOf T (Serial VectorSize Real)
-> SignalOf T (Serial VectorSize Real)
forall a b. (a -> b) -> a -> b
$
           (Exp Real -> T (Serial VectorSize Real) (Serial VectorSize Real)
forall n a.
(Positive n, PseudoRing a) =>
Exp a -> T (Serial n a) (Serial n a)
CausalPS.amplify Exp Real
amp T (Serial VectorSize Real) (Serial VectorSize Real)
-> T (Serial VectorSize Real) (Serial VectorSize Real)
-> T (Serial VectorSize Real) (Serial VectorSize Real)
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
<<<
            Exp Word -> T (Serial VectorSize Real) (Serial VectorSize Real)
forall a. Exp Word -> T a a
Causal.take Exp Word
attackTimeVector
            T (Serial VectorSize Real) (Serial VectorSize Real)
-> SignalOf T (Serial VectorSize Real)
-> SignalOf T (Serial VectorSize Real)
forall (process :: * -> * -> *) a b.
C process =>
process a b -> SignalOf process a -> SignalOf process b
$* Exp Real -> T (Serial VectorSize Real)
forall n a.
(Vector n a, Field a, IntegerConstant a, RationalConstant a) =>
Exp a -> T (Serial n a)
SigPS.parabolaFadeInInf
                  (Int -> Exp Real
forall a b. (Integral a, Num b) => a -> b
fromIntegral Int
vectorSize Exp Real -> Exp Real -> Exp Real
forall a. C a => a -> a -> a
*
                   Exp Word -> Exp Real
forall i ir a ar.
(NativeInteger i ir, NativeFloating a ar) =>
Exp i -> Exp a
Expr.fromIntegral Exp Word
attackTimeVector)))

softString :: IO (Instrument Real (Stereo.T Vector))
softString :: IO (Instrument Real (T (T VectorSize Real)))
softString =
   ((SampleRate Real
  -> Real
  -> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real))))
 -> (Real
     -> SampleRate Real
     -> Real
     -> LazyTime
     -> Vector (T VectorSize Real))
 -> Instrument Real (T (T VectorSize Real)))
-> IO
     (SampleRate Real
      -> Real
      -> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real))))
-> IO
     (Real
      -> SampleRate Real
      -> Real
      -> LazyTime
      -> Vector (T VectorSize Real))
-> IO (Instrument Real (T (T VectorSize Real)))
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 (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real)))
osc Real
-> SampleRate Real
-> Real
-> LazyTime
-> Vector (T VectorSize Real)
env SampleRate Real
sr Real
vel Real
freq LazyTime
dur ->
         T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real)))
-> Vector (T VectorSize Real) -> T (T (T VectorSize Real))
forall a b.
(Storable a, Storable b) =>
T (Vector a) (Vector b) -> Vector a -> Vector b
pioApply (SampleRate Real
-> Real
-> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real)))
osc SampleRate Real
sr Real
freq) (Real
-> SampleRate Real
-> Real
-> LazyTime
-> Vector (T VectorSize Real)
env Real
1 SampleRate Real
sr Real
vel LazyTime
dur))
      (DSL
  (SampleRate Real
   -> Real
   -> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real))))
  (Element
     (In
        (SampleRate Real
         -> Real
         -> T (Vector (T VectorSize Real))
              (Vector (T (T VectorSize Real))))))
  (Element
     (Out
        (SampleRate Real
         -> Real
         -> T (Vector (T VectorSize Real))
              (Vector (T (T VectorSize Real))))))
-> IO
     (SampleRate Real
      -> Real
      -> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real))))
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 (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real))))
   (Element
      (In
         (SampleRate Real
          -> Real
          -> T (Vector (T VectorSize Real))
               (Vector (T (T VectorSize Real))))))
   (Element
      (Out
         (SampleRate Real
          -> Real
          -> T (Vector (T VectorSize Real))
               (Vector (T (T VectorSize Real))))))
 -> IO
      (SampleRate Real
       -> Real
       -> T (Vector (T VectorSize Real))
            (Vector (T (T VectorSize Real)))))
-> DSL
     (SampleRate Real
      -> Real
      -> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real))))
     (Element
        (In
           (SampleRate Real
            -> Real
            -> T (Vector (T VectorSize Real))
                 (Vector (T (T VectorSize Real))))))
     (Element
        (Out
           (SampleRate Real
            -> Real
            -> T (Vector (T VectorSize Real))
                 (Vector (T (T VectorSize Real))))))
-> IO
     (SampleRate Real
      -> Real
      -> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real))))
forall a b. (a -> b) -> a -> b
$
       (Arg Frequency (Exp Real)
 -> SampleRate (Exp Real)
 -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
-> SampleRate (Exp Real)
-> Unwrapped
     (Arg Frequency (Exp Real)
      -> SampleRate (Exp Real)
      -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
forall a f. Wrapped a f => f -> SampleRate a -> Unwrapped f
wrapped ((Arg Frequency (Exp Real)
  -> SampleRate (Exp Real)
  -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
 -> SampleRate (Exp Real)
 -> Unwrapped
      (Arg Frequency (Exp Real)
       -> SampleRate (Exp Real)
       -> T (Serial VectorSize Real) (T (T (T VectorSize Real)))))
-> (Arg Frequency (Exp Real)
    -> SampleRate (Exp Real)
    -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
-> SampleRate (Exp Real)
-> Unwrapped
     (Arg Frequency (Exp Real)
      -> SampleRate (Exp Real)
      -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
forall a b. (a -> b) -> a -> b
$ \(Frequency Exp Real
freq) (SampleRate Exp Real
_sr) ->
       let osci :: Exp Real -> T (Serial VectorSize Real)
osci Exp Real
d = (forall r.
 Serial VectorSize Real
 -> CodeGenFunction r (Serial VectorSize Real))
-> Exp Real -> Exp Real -> T (Serial 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 Serial VectorSize Real
-> CodeGenFunction r (Serial VectorSize Real)
forall r.
Serial VectorSize Real
-> CodeGenFunction r (Serial 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
d Exp Real -> Exp Real -> Exp Real
forall a. C a => a -> a -> a
* Exp Real
freq)
       in T (Serial VectorSize Real) -> T (T (T VectorSize Real))
forall a. T (T a) -> T (T a)
Stereo.multiValue (T (Serial VectorSize Real) -> T (T (T VectorSize Real)))
-> T (Serial VectorSize Real, T (Serial VectorSize Real))
     (T (Serial VectorSize Real))
-> T (Serial VectorSize Real, T (Serial VectorSize Real))
     (T (T (T VectorSize Real)))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$>
           T (Serial VectorSize Real, T (Serial VectorSize Real))
  (T (Serial VectorSize Real))
forall a. PseudoRing a => T (a, T a) (T a)
Causal.envelopeStereo T (Serial VectorSize Real, T (Serial VectorSize Real))
  (T (T (T VectorSize Real)))
-> SignalOf T (T (Serial VectorSize Real))
-> T (Serial VectorSize Real) (T (T (T VectorSize Real)))
forall (process :: * -> * -> *) a b c.
C process =>
process (a, b) c -> SignalOf process b -> process a c
$>
              ((Serial VectorSize Real
 -> Serial VectorSize Real -> T (Serial VectorSize Real))
-> T (Serial VectorSize Real)
-> T (Serial VectorSize Real)
-> T (T (Serial VectorSize Real))
forall a b c. (a -> b -> c) -> T a -> T b -> T c
forall (f :: * -> *) a b c.
Applicative f =>
(a -> b -> c) -> f a -> f b -> f c
liftA2 Serial VectorSize Real
-> Serial VectorSize Real -> T (Serial VectorSize Real)
forall a. a -> a -> T a
Stereo.cons
                 (Exp Real -> T (Serial VectorSize Real)
osci Exp Real
1.005 T (Serial VectorSize Real)
-> T (Serial VectorSize Real) -> T (Serial VectorSize Real)
forall a. C a => a -> a -> a
+ Exp Real -> T (Serial VectorSize Real)
osci Exp Real
0.998)
                 (Exp Real -> T (Serial VectorSize Real)
osci Exp Real
1.002 T (Serial VectorSize Real)
-> T (Serial VectorSize Real) -> T (Serial VectorSize Real)
forall a. C a => a -> a -> a
+ Exp Real -> T (Serial VectorSize Real)
osci Exp Real
0.995)))
      IO
  (Real
   -> SampleRate Real
   -> Real
   -> LazyTime
   -> Vector (T VectorSize Real))
softStringReleaseEnvelope


softStringFM :: IO (PC.T (BM.T Real) -> Instrument Real (Stereo.T Vector))
softStringFM :: IO (T (T Real) -> Instrument Real (T (T VectorSize Real)))
softStringFM =
   ((SampleRate Real
  -> (T (T Real), Real)
  -> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real))))
 -> (Real
     -> SampleRate Real
     -> Real
     -> LazyTime
     -> Vector (T VectorSize Real))
 -> T (T Real)
 -> Instrument Real (T (T VectorSize Real)))
-> IO
     (SampleRate Real
      -> (T (T Real), Real)
      -> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real))))
-> IO
     (Real
      -> SampleRate Real
      -> Real
      -> LazyTime
      -> Vector (T VectorSize Real))
-> IO (T (T Real) -> Instrument Real (T (T VectorSize Real)))
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 Real), Real)
-> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real)))
osc Real
-> SampleRate Real
-> Real
-> LazyTime
-> Vector (T VectorSize Real)
env T (T Real)
fm SampleRate Real
sr Real
vel Real
freq LazyTime
dur ->
         T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real)))
-> Vector (T VectorSize Real) -> T (T (T VectorSize Real))
forall a b.
(Storable a, Storable b) =>
T (Vector a) (Vector b) -> Vector a -> Vector b
pioApply (SampleRate Real
-> (T (T Real), Real)
-> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real)))
osc SampleRate Real
sr (T (T Real)
fm, Real
freq)) (Real
-> SampleRate Real
-> Real
-> LazyTime
-> Vector (T VectorSize Real)
env Real
1 SampleRate Real
sr Real
vel LazyTime
dur))
      (DSL
  (SampleRate Real
   -> (T (T Real), Real)
   -> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real))))
  (Element
     (In
        (SampleRate Real
         -> (T (T Real), Real)
         -> T (Vector (T VectorSize Real))
              (Vector (T (T VectorSize Real))))))
  (Element
     (Out
        (SampleRate Real
         -> (T (T Real), Real)
         -> T (Vector (T VectorSize Real))
              (Vector (T (T VectorSize Real))))))
-> IO
     (SampleRate Real
      -> (T (T Real), Real)
      -> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real))))
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 Real), Real)
    -> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real))))
   (Element
      (In
         (SampleRate Real
          -> (T (T Real), Real)
          -> T (Vector (T VectorSize Real))
               (Vector (T (T VectorSize Real))))))
   (Element
      (Out
         (SampleRate Real
          -> (T (T Real), Real)
          -> T (Vector (T VectorSize Real))
               (Vector (T (T VectorSize Real))))))
 -> IO
      (SampleRate Real
       -> (T (T Real), Real)
       -> T (Vector (T VectorSize Real))
            (Vector (T (T VectorSize Real)))))
-> DSL
     (SampleRate Real
      -> (T (T Real), Real)
      -> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real))))
     (Element
        (In
           (SampleRate Real
            -> (T (T Real), Real)
            -> T (Vector (T VectorSize Real))
                 (Vector (T (T VectorSize Real))))))
     (Element
        (Out
           (SampleRate Real
            -> (T (T Real), Real)
            -> T (Vector (T VectorSize Real))
                 (Vector (T (T VectorSize Real))))))
-> IO
     (SampleRate Real
      -> (T (T Real), Real)
      -> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real))))
forall a b. (a -> b) -> a -> b
$
       (InputArg (Modulation Real) (Exp Real)
 -> SampleRate (Exp Real)
 -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
-> SampleRate (Exp Real)
-> Unwrapped
     (InputArg (Modulation Real) (Exp Real)
      -> SampleRate (Exp Real)
      -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
forall a f. Wrapped a f => f -> SampleRate a -> Unwrapped f
wrapped ((InputArg (Modulation Real) (Exp Real)
  -> SampleRate (Exp Real)
  -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
 -> SampleRate (Exp Real)
 -> Unwrapped
      (InputArg (Modulation Real) (Exp Real)
       -> SampleRate (Exp Real)
       -> T (Serial VectorSize Real) (T (T (T VectorSize Real)))))
-> (InputArg (Modulation Real) (Exp Real)
    -> SampleRate (Exp Real)
    -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
-> SampleRate (Exp Real)
-> Unwrapped
     (InputArg (Modulation Real) (Exp Real)
      -> SampleRate (Exp Real)
      -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
forall a b. (a -> b) -> a -> b
$ \(Modulation T (T (T RealValue))
fm) ->
       (SampleRate (Exp Real) -> Exp Real -> Exp Real)
-> Exp Real
-> (Exp Real
    -> SampleRate (Exp Real)
    -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
-> SampleRate (Exp Real)
-> T (Serial VectorSize 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 (Serial VectorSize Real) (T (T (T VectorSize Real))))
 -> SampleRate (Exp Real)
 -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
-> (Exp Real
    -> SampleRate (Exp Real)
    -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
-> SampleRate (Exp Real)
-> T (Serial VectorSize Real) (T (T (T VectorSize Real)))
forall a b. (a -> b) -> a -> b
$ \Exp Real
speed SampleRate (Exp Real)
_sr ->
       let osci :: Exp t -> T (Serial n t) (Serial n t)
osci Exp t
d = ((forall r. Serial n t -> CodeGenFunction r (Serial n t))
-> T (Serial n t, Serial n t) (Serial n t)
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 Serial n t -> CodeGenFunction r (Serial n t)
forall r. Serial n t -> CodeGenFunction r (Serial n t)
forall a r.
(PseudoRing a, IntegerConstant a) =>
a -> CodeGenFunction r a
WaveL.saw T (Serial n t, Serial n t) (Serial n t)
-> SignalOf T (Serial n t) -> T (Serial n t) (Serial n t)
forall (process :: * -> * -> *) a b c.
C process =>
process (a, b) c -> SignalOf process a -> process b c
$< SignalOf T (Serial n t)
T (Serial n t)
forall a. C a => a
zero) T (Serial n t) (Serial n t)
-> T (Serial n t) (Serial n t) -> T (Serial n t) (Serial n t)
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
<<< Exp t -> T (Serial n t) (Serial n t)
forall n a.
(Positive n, PseudoRing a) =>
Exp a -> T (Serial n a) (Serial n a)
CausalPS.amplify Exp t
d
       in T (Serial VectorSize Real) -> T (T (T VectorSize Real))
forall a. T (T a) -> T (T a)
Stereo.multiValue (T (Serial VectorSize Real) -> T (T (T VectorSize Real)))
-> T (Serial VectorSize Real) (T (Serial VectorSize Real))
-> T (Serial VectorSize Real) (T (T (T VectorSize Real)))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$>
           (T (Serial VectorSize Real, T (Serial VectorSize Real))
  (T (Serial VectorSize Real))
forall a. PseudoRing a => T (a, T a) (T a)
Causal.envelopeStereo T (Serial VectorSize Real, T (Serial VectorSize Real))
  (T (Serial VectorSize Real))
-> SignalOf T (T (Serial VectorSize Real))
-> T (Serial VectorSize Real) (T (Serial VectorSize Real))
forall (process :: * -> * -> *) a b c.
C process =>
process (a, b) c -> SignalOf process b -> process a c
$>
              ((Serial VectorSize Real
 -> Serial VectorSize Real -> T (Serial VectorSize Real))
-> T (Serial VectorSize Real) (Serial VectorSize Real)
-> T (Serial VectorSize Real) (Serial VectorSize Real)
-> T (Serial VectorSize Real) (T (Serial VectorSize Real))
forall a b c.
(a -> b -> c)
-> T (Serial VectorSize Real) a
-> T (Serial VectorSize Real) b
-> T (Serial VectorSize Real) c
forall (f :: * -> *) a b c.
Applicative f =>
(a -> b -> c) -> f a -> f b -> f c
liftA2 Serial VectorSize Real
-> Serial VectorSize Real -> T (Serial VectorSize Real)
forall a. a -> a -> T a
Stereo.cons
                  (Exp Real -> T (Serial VectorSize Real) (Serial VectorSize Real)
forall {t} {n}.
(C t, Fraction t, Positive n, PseudoRing t, IntegerConstant t) =>
Exp t -> T (Serial n t) (Serial n t)
osci Exp Real
1.005 T (Serial VectorSize Real) (Serial VectorSize Real)
-> T (Serial VectorSize Real) (Serial VectorSize Real)
-> T (Serial VectorSize Real) (Serial VectorSize Real)
forall a. C a => a -> a -> a
+ Exp Real -> T (Serial VectorSize Real) (Serial VectorSize Real)
forall {t} {n}.
(C t, Fraction t, Positive n, PseudoRing t, IntegerConstant t) =>
Exp t -> T (Serial n t) (Serial n t)
osci Exp Real
0.998)
                  (Exp Real -> T (Serial VectorSize Real) (Serial VectorSize Real)
forall {t} {n}.
(C t, Fraction t, Positive n, PseudoRing t, IntegerConstant t) =>
Exp t -> T (Serial n t) (Serial n t)
osci Exp Real
1.002 T (Serial VectorSize Real) (Serial VectorSize Real)
-> T (Serial VectorSize Real) (Serial VectorSize Real)
-> T (Serial VectorSize Real) (Serial VectorSize Real)
forall a. C a => a -> a -> a
+ Exp Real -> T (Serial VectorSize Real) (Serial VectorSize Real)
forall {t} {n}.
(C t, Fraction t, Positive n, PseudoRing t, IntegerConstant t) =>
Exp t -> T (Serial n t) (Serial n t)
osci Exp Real
0.995)
               T (Serial VectorSize Real) (T (Serial VectorSize Real))
-> SignalOf T (Serial VectorSize Real)
-> SignalOf T (T (Serial VectorSize Real))
forall (process :: * -> * -> *) a b.
C process =>
process a b -> SignalOf process a -> SignalOf process b
$* Exp Real -> T (T (T RealValue)) -> T (Serial VectorSize Real)
frequencyFromBendModulation Exp Real
speed T (T (T RealValue))
fm)))
      IO
  (Real
   -> SampleRate Real
   -> Real
   -> LazyTime
   -> Vector (T VectorSize Real))
softStringReleaseEnvelope


tineStereoFM ::
   IO (Real -> Real ->
       SigSt.ChunkSize ->
       PC.T (BM.T Real) ->
       Instrument Real (Stereo.T Vector))
tineStereoFM :: IO
  (Real
   -> Real
   -> ChunkSize
   -> T (T Real)
   -> Instrument Real (T (T VectorSize Real)))
tineStereoFM =
   ((SampleRate Real
  -> Real
  -> (T (T Real), Real)
  -> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real))))
 -> (Real
     -> Real
     -> ChunkSize
     -> SampleRate Real
     -> Real
     -> LazyTime
     -> Vector (T VectorSize Real))
 -> Real
 -> Real
 -> ChunkSize
 -> T (T Real)
 -> Instrument Real (T (T VectorSize Real)))
-> IO
     (SampleRate Real
      -> Real
      -> (T (T Real), Real)
      -> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real))))
-> IO
     (Real
      -> Real
      -> ChunkSize
      -> SampleRate Real
      -> Real
      -> LazyTime
      -> Vector (T VectorSize Real))
-> IO
     (Real
      -> Real
      -> ChunkSize
      -> T (T Real)
      -> Instrument Real (T (T VectorSize Real)))
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 Real), Real)
-> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real)))
osc Real
-> Real
-> ChunkSize
-> SampleRate Real
-> Real
-> LazyTime
-> Vector (T VectorSize Real)
env Real
dec Real
rel ChunkSize
vcsize T (T Real)
fm SampleRate Real
sr Real
vel Real
freq LazyTime
dur ->
         T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real)))
-> Vector (T VectorSize Real) -> T (T (T VectorSize Real))
forall a b.
(Storable a, Storable b) =>
T (Vector a) (Vector b) -> Vector a -> Vector b
pioApply (SampleRate Real
-> Real
-> (T (T Real), Real)
-> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real)))
osc SampleRate Real
sr Real
vel (T (T Real)
fm, Real
freq)) (Real
-> Real
-> ChunkSize
-> SampleRate Real
-> Real
-> LazyTime
-> Vector (T VectorSize Real)
env Real
dec Real
rel ChunkSize
vcsize SampleRate Real
sr Real
0 LazyTime
dur))
      (DSL
  (SampleRate Real
   -> Real
   -> (T (T Real), Real)
   -> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real))))
  (Element
     (In
        (SampleRate Real
         -> Real
         -> (T (T Real), Real)
         -> T (Vector (T VectorSize Real))
              (Vector (T (T VectorSize Real))))))
  (Element
     (Out
        (SampleRate Real
         -> Real
         -> (T (T Real), Real)
         -> T (Vector (T VectorSize Real))
              (Vector (T (T VectorSize Real))))))
-> IO
     (SampleRate Real
      -> Real
      -> (T (T Real), Real)
      -> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real))))
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 Real), Real)
    -> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real))))
   (Element
      (In
         (SampleRate Real
          -> Real
          -> (T (T Real), Real)
          -> T (Vector (T VectorSize Real))
               (Vector (T (T VectorSize Real))))))
   (Element
      (Out
         (SampleRate Real
          -> Real
          -> (T (T Real), Real)
          -> T (Vector (T VectorSize Real))
               (Vector (T (T VectorSize Real))))))
 -> IO
      (SampleRate Real
       -> Real
       -> (T (T Real), Real)
       -> T (Vector (T VectorSize Real))
            (Vector (T (T VectorSize Real)))))
-> DSL
     (SampleRate Real
      -> Real
      -> (T (T Real), Real)
      -> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real))))
     (Element
        (In
           (SampleRate Real
            -> Real
            -> (T (T Real), Real)
            -> T (Vector (T VectorSize Real))
                 (Vector (T (T VectorSize Real))))))
     (Element
        (Out
           (SampleRate Real
            -> Real
            -> (T (T Real), Real)
            -> T (Vector (T VectorSize Real))
                 (Vector (T (T VectorSize Real))))))
-> IO
     (SampleRate Real
      -> Real
      -> (T (T Real), Real)
      -> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real))))
forall a b. (a -> b) -> a -> b
$
       (Arg Number (Exp Real)
 -> InputArg (Modulation Real) (Exp Real)
 -> SampleRate (Exp Real)
 -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
-> SampleRate (Exp Real)
-> Unwrapped
     (Arg Number (Exp Real)
      -> InputArg (Modulation Real) (Exp Real)
      -> SampleRate (Exp Real)
      -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
forall a f. Wrapped a f => f -> SampleRate a -> Unwrapped f
wrapped ((Arg Number (Exp Real)
  -> InputArg (Modulation Real) (Exp Real)
  -> SampleRate (Exp Real)
  -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
 -> SampleRate (Exp Real)
 -> Unwrapped
      (Arg Number (Exp Real)
       -> InputArg (Modulation Real) (Exp Real)
       -> SampleRate (Exp Real)
       -> T (Serial VectorSize Real) (T (T (T VectorSize Real)))))
-> (Arg Number (Exp Real)
    -> InputArg (Modulation Real) (Exp Real)
    -> SampleRate (Exp Real)
    -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
-> SampleRate (Exp Real)
-> Unwrapped
     (Arg Number (Exp Real)
      -> InputArg (Modulation Real) (Exp Real)
      -> SampleRate (Exp Real)
      -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
forall a b. (a -> b) -> a -> b
$ \(Number Exp Real
vel) (Modulation T (T (T RealValue))
fm) ->
       (SampleRate (Exp Real) -> Exp Real -> Exp Real)
-> Exp Real
-> (Exp Real
    -> SampleRate (Exp Real)
    -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
-> SampleRate (Exp Real)
-> T (Serial VectorSize 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 (Serial VectorSize Real) (T (T (T VectorSize Real))))
 -> SampleRate (Exp Real)
 -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
-> (Exp Real
    -> SampleRate (Exp Real)
    -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
-> SampleRate (Exp Real)
-> T (Serial VectorSize Real) (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 (Serial VectorSize Real) (T (T (T VectorSize Real))))
-> SampleRate (Exp Real)
-> T (Serial VectorSize 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 (Serial VectorSize Real) (T (T (T VectorSize Real))))
 -> SampleRate (Exp Real)
 -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
-> (Exp Real
    -> SampleRate (Exp Real)
    -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
-> SampleRate (Exp Real)
-> T (Serial VectorSize Real) (T (T (T VectorSize Real)))
forall a b. (a -> b) -> a -> b
$ \Exp Real
speed SampleRate (Exp Real)
_sr ->
         (let chanOsci :: Exp t -> T (Serial n t, Serial n t) (Serial n t)
chanOsci Exp t
d =
                 (forall r. Serial n t -> CodeGenFunction r (Serial n t))
-> T (Serial n t, Serial n t) (Serial n t)
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 Serial n t -> CodeGenFunction r (Serial n t)
forall r. Serial n t -> CodeGenFunction r (Serial n t)
forall a r.
(PseudoRing a, IntegerConstant a, Fraction a) =>
a -> CodeGenFunction r a
WaveL.approxSine2
                    T (Serial n t, Serial n t) (Serial n t)
-> T (Serial n t, Serial n t) (Serial n t, Serial n t)
-> T (Serial n t, Serial n t) (Serial n t)
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
<<< T (Serial n t) (Serial n t)
-> T (Serial n t, Serial n t) (Serial n t, Serial n t)
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 (Exp t -> T (Serial n t) (Serial n t)
forall n a.
(Positive n, PseudoRing a) =>
Exp a -> T (Serial n a) (Serial n a)
CausalPS.amplify Exp t
d)
          in T (Serial VectorSize Real) -> T (T (T VectorSize Real))
forall a. T (T a) -> T (T a)
Stereo.multiValue (T (Serial VectorSize Real) -> T (T (T VectorSize Real)))
-> T (Serial VectorSize Real, T (Serial VectorSize Real))
     (T (Serial VectorSize Real))
-> T (Serial VectorSize Real, T (Serial VectorSize Real))
     (T (T (T VectorSize Real)))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$>
              T (Serial VectorSize Real, T (Serial VectorSize Real))
  (T (Serial VectorSize Real))
forall a. PseudoRing a => T (a, T a) (T a)
Causal.envelopeStereo T (Serial VectorSize Real, T (Serial VectorSize Real))
  (T (T (T VectorSize Real)))
-> SignalOf T (T (Serial VectorSize Real))
-> T (Serial VectorSize Real) (T (T (T VectorSize Real)))
forall (process :: * -> * -> *) a b c.
C process =>
process (a, b) c -> SignalOf process b -> process a c
$>
                 ((Serial VectorSize Real
 -> Serial VectorSize Real -> T (Serial VectorSize Real))
-> T (Serial VectorSize Real, Serial VectorSize Real)
     (Serial VectorSize Real)
-> T (Serial VectorSize Real, Serial VectorSize Real)
     (Serial VectorSize Real)
-> T (Serial VectorSize Real, Serial VectorSize Real)
     (T (Serial VectorSize Real))
forall a b c.
(a -> b -> c)
-> T (Serial VectorSize Real, Serial VectorSize Real) a
-> T (Serial VectorSize Real, Serial VectorSize Real) b
-> T (Serial VectorSize Real, Serial VectorSize Real) c
forall (f :: * -> *) a b c.
Applicative f =>
(a -> b -> c) -> f a -> f b -> f c
liftA2 Serial VectorSize Real
-> Serial VectorSize Real -> T (Serial VectorSize Real)
forall a. a -> a -> T a
Stereo.cons (Exp Real
-> T (Serial VectorSize Real, Serial VectorSize Real)
     (Serial VectorSize Real)
forall {t} {n}.
(C t, Positive n, PseudoRing t, IntegerConstant t, Fraction t) =>
Exp t -> T (Serial n t, Serial n t) (Serial n t)
chanOsci Exp Real
0.995) (Exp Real
-> T (Serial VectorSize Real, Serial VectorSize Real)
     (Serial VectorSize Real)
forall {t} {n}.
(C t, Positive n, PseudoRing t, IntegerConstant t, Fraction t) =>
Exp t -> T (Serial n t, Serial n t) (Serial n t)
chanOsci Exp Real
1.005)
                  T (Serial VectorSize Real, Serial VectorSize Real)
  (T (Serial VectorSize Real))
-> T (Serial VectorSize Real)
     (Serial VectorSize Real, Serial VectorSize Real)
-> T (Serial VectorSize Real) (T (Serial VectorSize Real))
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
<<<
                  (((T (Serial VectorSize Real, Serial VectorSize Real)
  (Serial VectorSize Real)
forall a. PseudoRing a => T (a, a) a
Causal.envelope
                       T (Serial VectorSize Real, Serial VectorSize Real)
  (Serial VectorSize Real)
-> SignalOf T (Serial VectorSize Real)
-> T (Serial VectorSize Real) (Serial VectorSize Real)
forall (process :: * -> * -> *) a b c.
C process =>
process (a, b) c -> SignalOf process a -> process b c
$< Exp Real -> Exp Real -> T (Serial 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
velExp Real -> Exp Real -> Exp Real
forall a. C a => a -> a -> a
+Exp Real
1))
                     T (Serial VectorSize Real) (Serial VectorSize Real)
-> T (Serial VectorSize Real) (Serial VectorSize Real)
-> T (Serial VectorSize Real) (Serial VectorSize Real)
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
<<< ((forall r.
 Serial VectorSize Real
 -> CodeGenFunction r (Serial VectorSize Real))
-> T (Serial VectorSize Real, Serial VectorSize Real)
     (Serial 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 Serial VectorSize Real
-> CodeGenFunction r (Serial VectorSize Real)
forall r.
Serial VectorSize Real
-> CodeGenFunction r (Serial VectorSize Real)
forall a r.
(PseudoRing a, IntegerConstant a, Fraction a) =>
a -> CodeGenFunction r a
WaveL.approxSine2 T (Serial VectorSize Real, Serial VectorSize Real)
  (Serial VectorSize Real)
-> SignalOf T (Serial VectorSize Real)
-> T (Serial VectorSize Real) (Serial VectorSize Real)
forall (process :: * -> * -> *) a b c.
C process =>
process (a, b) c -> SignalOf process a -> process b c
$< SignalOf T (Serial VectorSize Real)
T (Serial VectorSize Real)
forall a. C a => a
zero)
                     T (Serial VectorSize Real) (Serial VectorSize Real)
-> T (Serial VectorSize Real) (Serial VectorSize Real)
-> T (Serial VectorSize Real) (Serial VectorSize Real)
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 (Serial VectorSize Real) (Serial VectorSize Real)
forall n a.
(Positive n, PseudoRing a) =>
Exp a -> T (Serial n a) (Serial n a)
CausalPS.amplify Exp Real
2)
                   T (Serial VectorSize Real) (Serial VectorSize Real)
-> T (Serial VectorSize Real) (Serial VectorSize Real)
-> T (Serial VectorSize Real)
     (Serial VectorSize Real, Serial 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 (Serial VectorSize Real) (Serial VectorSize Real)
forall a. T a a
forall {k} (cat :: k -> k -> *) (a :: k). Category cat => cat a a
id)
                  T (Serial VectorSize Real) (T (Serial VectorSize Real))
-> SignalOf T (Serial VectorSize Real)
-> SignalOf T (T (Serial VectorSize Real))
forall (process :: * -> * -> *) a b.
C process =>
process a b -> SignalOf process a -> SignalOf process b
$* Exp Real -> T (T (T RealValue)) -> T (Serial VectorSize Real)
frequencyFromBendModulation Exp Real
speed T (T (T RealValue))
fm)))
      IO
  (Real
   -> Real
   -> ChunkSize
   -> SampleRate Real
   -> Real
   -> LazyTime
   -> Vector (T VectorSize Real))
pingReleaseEnvelope


_tineControlledProc, tineControlledFnProc ::
   Sig.T (Const.T RealValue) ->
   Sig.T (Const.T RealValue) ->
   Exp Real ->
   SampleRate (Exp Real) ->
   Causal.T (Stereo.T VectorValue) (Stereo.T VectorValue)
_tineControlledProc :: T (T RealValue)
-> T (T RealValue)
-> Exp Real
-> SampleRate (Exp Real)
-> T (T (Serial VectorSize Real)) (T (Serial VectorSize Real))
_tineControlledProc T (T RealValue)
index T (T RealValue)
depth Exp Real
vel = (SampleRate (Exp Real) -> Exp Real -> Exp Real)
-> Exp Real
-> (Exp Real
    -> SampleRate (Exp Real)
    -> T (T (Serial VectorSize Real)) (T (Serial VectorSize Real)))
-> SampleRate (Exp Real)
-> T (T (Serial VectorSize Real)) (T (Serial 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 (Serial VectorSize Real)) (T (Serial VectorSize Real)))
 -> SampleRate (Exp Real)
 -> T (T (Serial VectorSize Real)) (T (Serial VectorSize Real)))
-> (Exp Real
    -> SampleRate (Exp Real)
    -> T (T (Serial VectorSize Real)) (T (Serial VectorSize Real)))
-> SampleRate (Exp Real)
-> T (T (Serial VectorSize Real)) (T (Serial VectorSize Real))
forall a b. (a -> b) -> a -> b
$ \Exp Real
halfLife SampleRate (Exp Real)
_sr ->
   T (Serial VectorSize Real, Serial VectorSize Real)
  (Serial VectorSize Real)
-> T (T (Serial VectorSize Real, Serial VectorSize Real))
     (T (Serial 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.
 Serial VectorSize Real
 -> CodeGenFunction r (Serial VectorSize Real))
-> T (Serial VectorSize Real, Serial VectorSize Real)
     (Serial 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 Serial VectorSize Real
-> CodeGenFunction r (Serial VectorSize Real)
forall r.
Serial VectorSize Real
-> CodeGenFunction r (Serial VectorSize Real)
forall a r.
(PseudoRing a, IntegerConstant a, Fraction a) =>
a -> CodeGenFunction r a
WaveL.approxSine2)
   T (T (Serial VectorSize Real, Serial VectorSize Real))
  (T (Serial VectorSize Real))
-> T (T (Serial VectorSize Real))
     (T (Serial VectorSize Real, Serial VectorSize Real))
-> T (T (Serial VectorSize Real)) (T (Serial VectorSize Real))
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
<<<
   (T (Serial VectorSize Real), T (Serial VectorSize Real))
-> T (Serial VectorSize Real, Serial VectorSize Real)
forall a b. (T a, T b) -> T (a, b)
Stereo.interleave
   ((T (Serial VectorSize Real), T (Serial VectorSize Real))
 -> T (Serial VectorSize Real, Serial VectorSize Real))
-> T (T (Serial VectorSize Real))
     (T (Serial VectorSize Real), T (Serial VectorSize Real))
-> T (T (Serial VectorSize Real))
     (T (Serial VectorSize Real, Serial VectorSize Real))
forall (a :: * -> * -> *) c d b.
Arrow a =>
(c -> d) -> a b c -> a b d
^<<
   ((T (Serial VectorSize Real, T (Serial VectorSize Real))
  (T (Serial VectorSize Real))
forall a. PseudoRing a => T (a, T a) (T a)
Causal.envelopeStereo
       T (Serial VectorSize Real, T (Serial VectorSize Real))
  (T (Serial VectorSize Real))
-> SignalOf T (Serial VectorSize Real)
-> T (T (Serial VectorSize Real)) (T (Serial VectorSize Real))
forall (process :: * -> * -> *) a b c.
C process =>
process (a, b) c -> SignalOf process a -> process b c
$< (T (T RealValue) -> T (Serial VectorSize Real)
piecewiseConstantVector T (T RealValue)
depth
           T (Serial VectorSize Real)
-> T (Serial VectorSize Real) -> T (Serial VectorSize Real)
forall a. C a => a -> a -> a
*
           Exp Real -> Exp Real -> T (Serial 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
velExp Real -> Exp Real -> Exp Real
forall a. C a => a -> a -> a
+Exp Real
1)))
    T (T (Serial VectorSize Real)) (T (Serial VectorSize Real))
-> T (T (Serial VectorSize Real)) (T (Serial VectorSize Real))
-> T (T (Serial VectorSize Real)) (T (Serial VectorSize Real))
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
<<<
    T (Serial VectorSize Real) (Serial VectorSize Real)
-> T (T (Serial VectorSize Real)) (T (Serial 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.
 Serial VectorSize Real
 -> CodeGenFunction r (Serial VectorSize Real))
-> T (Serial VectorSize Real, Serial VectorSize Real)
     (Serial 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 Serial VectorSize Real
-> CodeGenFunction r (Serial VectorSize Real)
forall r.
Serial VectorSize Real
-> CodeGenFunction r (Serial VectorSize Real)
forall a r.
(PseudoRing a, IntegerConstant a, Fraction a) =>
a -> CodeGenFunction r a
WaveL.approxSine2 T (Serial VectorSize Real, Serial VectorSize Real)
  (Serial VectorSize Real)
-> SignalOf T (Serial VectorSize Real)
-> T (Serial VectorSize Real) (Serial VectorSize Real)
forall (process :: * -> * -> *) a b c.
C process =>
process (a, b) c -> SignalOf process a -> process b c
$< SignalOf T (Serial VectorSize Real)
T (Serial VectorSize Real)
forall a. C a => a
zero)
    T (T (Serial VectorSize Real)) (T (Serial VectorSize Real))
-> T (T (Serial VectorSize Real)) (T (Serial VectorSize Real))
-> T (T (Serial VectorSize Real)) (T (Serial VectorSize Real))
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
<<<
    (T (Serial VectorSize Real, T (Serial VectorSize Real))
  (T (Serial VectorSize Real))
forall a. PseudoRing a => T (a, T a) (T a)
Causal.envelopeStereo T (Serial VectorSize Real, T (Serial VectorSize Real))
  (T (Serial VectorSize Real))
-> SignalOf T (Serial VectorSize Real)
-> T (T (Serial VectorSize Real)) (T (Serial VectorSize Real))
forall (process :: * -> * -> *) a b c.
C process =>
process (a, b) c -> SignalOf process a -> process b c
$< T (T RealValue) -> T (Serial VectorSize Real)
piecewiseConstantVector T (T RealValue)
index))
            T (T (Serial VectorSize Real)) (T (Serial VectorSize Real))
-> T (T (Serial VectorSize Real)) (T (Serial VectorSize Real))
-> T (T (Serial VectorSize Real))
     (T (Serial VectorSize Real), T (Serial 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 (Serial VectorSize Real)) (T (Serial VectorSize Real))
forall a. T a a
forall {k} (cat :: k -> k -> *) (a :: k). Category cat => cat a a
id

tineControlledFnProc :: T (T RealValue)
-> T (T RealValue)
-> Exp Real
-> SampleRate (Exp Real)
-> T (T (Serial VectorSize Real)) (T (Serial VectorSize Real))
tineControlledFnProc T (T RealValue)
index T (T RealValue)
depth Exp Real
vel = (SampleRate (Exp Real) -> Exp Real -> Exp Real)
-> Exp Real
-> (Exp Real
    -> SampleRate (Exp Real)
    -> T (T (Serial VectorSize Real)) (T (Serial VectorSize Real)))
-> SampleRate (Exp Real)
-> T (T (Serial VectorSize Real)) (T (Serial 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 (Serial VectorSize Real)) (T (Serial VectorSize Real)))
 -> SampleRate (Exp Real)
 -> T (T (Serial VectorSize Real)) (T (Serial VectorSize Real)))
-> (Exp Real
    -> SampleRate (Exp Real)
    -> T (T (Serial VectorSize Real)) (T (Serial VectorSize Real)))
-> SampleRate (Exp Real)
-> T (T (Serial VectorSize Real)) (T (Serial VectorSize Real))
forall a b. (a -> b) -> a -> b
$ \Exp Real
halfLife SampleRate (Exp Real)
_sr ->
   Atom (T (Serial VectorSize Real))
-> (GuidedArguments
      (T (T (Serial VectorSize Real)))
      (Atom (T (Serial VectorSize Real)))
    -> T (T (Serial VectorSize Real)) (T (Serial VectorSize Real)))
-> T (T (Serial VectorSize Real)) (T (Serial VectorSize Real))
forall pat inp out.
(MakeGuidedArguments pat, PatternArguments pat ~ inp) =>
pat -> (GuidedArguments (T inp) pat -> T inp out) -> T inp out
F.withGuidedArgs Atom (T (Serial VectorSize Real))
forall a. Atom a
F.atom ((GuidedArguments
    (T (T (Serial VectorSize Real)))
    (Atom (T (Serial VectorSize Real)))
  -> T (T (Serial VectorSize Real)) (T (Serial VectorSize Real)))
 -> T (T (Serial VectorSize Real)) (T (Serial VectorSize Real)))
-> (GuidedArguments
      (T (T (Serial VectorSize Real)))
      (Atom (T (Serial VectorSize Real)))
    -> T (T (Serial VectorSize Real)) (T (Serial VectorSize Real)))
-> T (T (Serial VectorSize Real)) (T (Serial VectorSize Real))
forall a b. (a -> b) -> a -> b
$ \GuidedArguments
  (T (T (Serial VectorSize Real)))
  (Atom (T (Serial VectorSize Real)))
freq ->
      T (Serial VectorSize Real, Serial VectorSize Real)
  (Serial VectorSize Real)
-> T (T (Serial VectorSize Real, Serial VectorSize Real))
     (T (Serial 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.
 Serial VectorSize Real
 -> CodeGenFunction r (Serial VectorSize Real))
-> T (Serial VectorSize Real, Serial VectorSize Real)
     (Serial 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 Serial VectorSize Real
-> CodeGenFunction r (Serial VectorSize Real)
forall r.
Serial VectorSize Real
-> CodeGenFunction r (Serial VectorSize Real)
forall a r.
(PseudoRing a, IntegerConstant a, Fraction a) =>
a -> CodeGenFunction r a
WaveL.approxSine2)
      T (T (Serial VectorSize Real, Serial VectorSize Real))
  (T (Serial VectorSize Real))
-> T (T (Serial VectorSize Real))
     (T (Serial VectorSize Real, Serial VectorSize Real))
-> T (T (Serial VectorSize Real)) (T (Serial VectorSize Real))
forall b c a. T b c -> T a b -> T a c
$&
      (T (Serial VectorSize Real)
 -> T (Serial VectorSize Real)
 -> T (Serial VectorSize Real, Serial VectorSize Real))
-> T (T (Serial VectorSize Real)) (T (Serial VectorSize Real))
-> T (T (Serial VectorSize Real)) (T (Serial VectorSize Real))
-> T (T (Serial VectorSize Real))
     (T (Serial VectorSize Real, Serial VectorSize Real))
forall a b c.
(a -> b -> c)
-> T (T (Serial VectorSize Real)) a
-> T (T (Serial VectorSize Real)) b
-> T (T (Serial VectorSize Real)) c
forall (f :: * -> *) a b c.
Applicative f =>
(a -> b -> c) -> f a -> f b -> f c
liftA2 ((Serial VectorSize Real
 -> Serial VectorSize Real
 -> (Serial VectorSize Real, Serial VectorSize Real))
-> T (Serial VectorSize Real)
-> T (Serial VectorSize Real)
-> T (Serial VectorSize Real, Serial VectorSize Real)
forall a b c. (a -> b -> c) -> T a -> T b -> T c
forall (f :: * -> *) a b c.
Applicative f =>
(a -> b -> c) -> f a -> f b -> f c
liftA2 (,))
         ((T (Serial VectorSize Real, T (Serial VectorSize Real))
  (T (Serial VectorSize Real))
forall a. PseudoRing a => T (a, T a) (T a)
Causal.envelopeStereo
             T (Serial VectorSize Real, T (Serial VectorSize Real))
  (T (Serial VectorSize Real))
-> SignalOf T (Serial VectorSize Real)
-> T (T (Serial VectorSize Real)) (T (Serial VectorSize Real))
forall (process :: * -> * -> *) a b c.
C process =>
process (a, b) c -> SignalOf process a -> process b c
$< (T (T RealValue) -> T (Serial VectorSize Real)
piecewiseConstantVector T (T RealValue)
depth
                 T (Serial VectorSize Real)
-> T (Serial VectorSize Real) -> T (Serial VectorSize Real)
forall a. C a => a -> a -> a
*
                 Exp Real -> Exp Real -> T (Serial 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
velExp Real -> Exp Real -> Exp Real
forall a. C a => a -> a -> a
+Exp Real
1)))
          T (T (Serial VectorSize Real)) (T (Serial VectorSize Real))
-> T (T (Serial VectorSize Real)) (T (Serial VectorSize Real))
-> T (T (Serial VectorSize Real)) (T (Serial VectorSize Real))
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
<<<
          T (Serial VectorSize Real) (Serial VectorSize Real)
-> T (T (Serial VectorSize Real)) (T (Serial 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.
 Serial VectorSize Real
 -> CodeGenFunction r (Serial VectorSize Real))
-> T (Serial VectorSize Real, Serial VectorSize Real)
     (Serial 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 Serial VectorSize Real
-> CodeGenFunction r (Serial VectorSize Real)
forall r.
Serial VectorSize Real
-> CodeGenFunction r (Serial VectorSize Real)
forall a r.
(PseudoRing a, IntegerConstant a, Fraction a) =>
a -> CodeGenFunction r a
WaveL.approxSine2 T (Serial VectorSize Real, Serial VectorSize Real)
  (Serial VectorSize Real)
-> SignalOf T (Serial VectorSize Real)
-> T (Serial VectorSize Real) (Serial VectorSize Real)
forall (process :: * -> * -> *) a b c.
C process =>
process (a, b) c -> SignalOf process a -> process b c
$< SignalOf T (Serial VectorSize Real)
T (Serial VectorSize Real)
forall a. C a => a
zero)
          T (T (Serial VectorSize Real)) (T (Serial VectorSize Real))
-> T (T (Serial VectorSize Real)) (T (Serial VectorSize Real))
-> T (T (Serial VectorSize Real)) (T (Serial VectorSize Real))
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
<<<
          (T (Serial VectorSize Real, T (Serial VectorSize Real))
  (T (Serial VectorSize Real))
forall a. PseudoRing a => T (a, T a) (T a)
Causal.envelopeStereo T (Serial VectorSize Real, T (Serial VectorSize Real))
  (T (Serial VectorSize Real))
-> SignalOf T (Serial VectorSize Real)
-> T (T (Serial VectorSize Real)) (T (Serial VectorSize Real))
forall (process :: * -> * -> *) a b c.
C process =>
process (a, b) c -> SignalOf process a -> process b c
$< T (T RealValue) -> T (Serial VectorSize Real)
piecewiseConstantVector T (T RealValue)
index)
          T (T (Serial VectorSize Real)) (T (Serial VectorSize Real))
-> T (T (Serial VectorSize Real)) (T (Serial VectorSize Real))
-> T (T (Serial VectorSize Real)) (T (Serial VectorSize Real))
forall b c a. T b c -> T a b -> T a c
$&
          GuidedArguments
  (T (T (Serial VectorSize Real)))
  (Atom (T (Serial VectorSize Real)))
T (T (Serial VectorSize Real)) (T (Serial VectorSize Real))
freq)
         GuidedArguments
  (T (T (Serial VectorSize Real)))
  (Atom (T (Serial VectorSize Real)))
T (T (Serial VectorSize Real)) (T (Serial VectorSize Real))
freq

tineControlledFM ::
   IO (Real -> Real ->
       PC.T Real ->
       PC.T Real -> PC.T Real ->
       SigSt.ChunkSize ->
       PC.T (BM.T Real) ->
       Instrument Real (Stereo.T Vector))
tineControlledFM :: IO
  (Real
   -> Real
   -> T Real
   -> T Real
   -> T Real
   -> ChunkSize
   -> T (T Real)
   -> Instrument Real (T (T VectorSize Real)))
tineControlledFM =
   ((SampleRate Real
  -> (T Real, T Real)
  -> Real
  -> (T Real, T (T Real), Real)
  -> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real))))
 -> (Real
     -> Real
     -> ChunkSize
     -> SampleRate Real
     -> Real
     -> LazyTime
     -> Vector (T VectorSize Real))
 -> Real
 -> Real
 -> T Real
 -> T Real
 -> T Real
 -> ChunkSize
 -> T (T Real)
 -> Instrument Real (T (T VectorSize Real)))
-> IO
     (SampleRate Real
      -> (T Real, T Real)
      -> Real
      -> (T Real, T (T Real), Real)
      -> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real))))
-> IO
     (Real
      -> Real
      -> ChunkSize
      -> SampleRate Real
      -> Real
      -> LazyTime
      -> Vector (T VectorSize Real))
-> IO
     (Real
      -> Real
      -> T Real
      -> T Real
      -> T Real
      -> ChunkSize
      -> T (T Real)
      -> Instrument Real (T (T VectorSize Real)))
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 Real, T Real)
-> Real
-> (T Real, T (T Real), Real)
-> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real)))
osc Real
-> Real
-> ChunkSize
-> SampleRate Real
-> Real
-> LazyTime
-> Vector (T VectorSize Real)
env Real
dec Real
rel T Real
detune T Real
index T Real
depth ChunkSize
vcsize T (T Real)
fm SampleRate Real
sr Real
vel Real
freq LazyTime
dur ->
         T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real)))
-> Vector (T VectorSize Real) -> T (T (T VectorSize Real))
forall a b.
(Storable a, Storable b) =>
T (Vector a) (Vector b) -> Vector a -> Vector b
pioApply
            (SampleRate Real
-> (T Real, T Real)
-> Real
-> (T Real, T (T Real), Real)
-> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real)))
osc SampleRate Real
sr (T Real
index, T Real
depth) Real
vel (T Real
detune, T (T Real)
fm, Real
freq))
            (Real
-> Real
-> ChunkSize
-> SampleRate Real
-> Real
-> LazyTime
-> Vector (T VectorSize Real)
env Real
dec Real
rel ChunkSize
vcsize SampleRate Real
sr Real
0 LazyTime
dur))
      (DSL
  (SampleRate Real
   -> (T Real, T Real)
   -> Real
   -> (T Real, T (T Real), Real)
   -> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real))))
  (Element
     (In
        (SampleRate Real
         -> (T Real, T Real)
         -> Real
         -> (T Real, T (T Real), Real)
         -> T (Vector (T VectorSize Real))
              (Vector (T (T VectorSize Real))))))
  (Element
     (Out
        (SampleRate Real
         -> (T Real, T Real)
         -> Real
         -> (T Real, T (T Real), Real)
         -> T (Vector (T VectorSize Real))
              (Vector (T (T VectorSize Real))))))
-> IO
     (SampleRate Real
      -> (T Real, T Real)
      -> Real
      -> (T Real, T (T Real), Real)
      -> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real))))
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 Real, T Real)
    -> Real
    -> (T Real, T (T Real), Real)
    -> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real))))
   (Element
      (In
         (SampleRate Real
          -> (T Real, T Real)
          -> Real
          -> (T Real, T (T Real), Real)
          -> T (Vector (T VectorSize Real))
               (Vector (T (T VectorSize Real))))))
   (Element
      (Out
         (SampleRate Real
          -> (T Real, T Real)
          -> Real
          -> (T Real, T (T Real), Real)
          -> T (Vector (T VectorSize Real))
               (Vector (T (T VectorSize Real))))))
 -> IO
      (SampleRate Real
       -> (T Real, T Real)
       -> Real
       -> (T Real, T (T Real), Real)
       -> T (Vector (T VectorSize Real))
            (Vector (T (T VectorSize Real)))))
-> DSL
     (SampleRate Real
      -> (T Real, T Real)
      -> Real
      -> (T Real, T (T Real), Real)
      -> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real))))
     (Element
        (In
           (SampleRate Real
            -> (T Real, T Real)
            -> Real
            -> (T Real, T (T Real), Real)
            -> T (Vector (T VectorSize Real))
                 (Vector (T (T VectorSize Real))))))
     (Element
        (Out
           (SampleRate Real
            -> (T Real, T Real)
            -> Real
            -> (T Real, T (T Real), Real)
            -> T (Vector (T VectorSize Real))
                 (Vector (T (T VectorSize Real))))))
-> IO
     (SampleRate Real
      -> (T Real, T Real)
      -> Real
      -> (T Real, T (T Real), Real)
      -> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real))))
forall a b. (a -> b) -> a -> b
$
       ((InputArg (Control (T RealValue)) (Exp Real),
  InputArg (Control (T RealValue)) (Exp Real))
 -> Arg Number (Exp Real)
 -> InputArg (DetuneModulation Real) (Exp Real)
 -> SampleRate (Exp Real)
 -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
-> SampleRate (Exp Real)
-> Unwrapped
     ((InputArg (Control (T RealValue)) (Exp Real),
       InputArg (Control (T RealValue)) (Exp Real))
      -> Arg Number (Exp Real)
      -> InputArg (DetuneModulation Real) (Exp Real)
      -> SampleRate (Exp Real)
      -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
forall a f. Wrapped a f => f -> SampleRate a -> Unwrapped f
wrapped (((InputArg (Control (T RealValue)) (Exp Real),
   InputArg (Control (T RealValue)) (Exp Real))
  -> Arg Number (Exp Real)
  -> InputArg (DetuneModulation Real) (Exp Real)
  -> SampleRate (Exp Real)
  -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
 -> SampleRate (Exp Real)
 -> Unwrapped
      ((InputArg (Control (T RealValue)) (Exp Real),
        InputArg (Control (T RealValue)) (Exp Real))
       -> Arg Number (Exp Real)
       -> InputArg (DetuneModulation Real) (Exp Real)
       -> SampleRate (Exp Real)
       -> T (Serial VectorSize Real) (T (T (T VectorSize Real)))))
-> ((InputArg (Control (T RealValue)) (Exp Real),
     InputArg (Control (T RealValue)) (Exp Real))
    -> Arg Number (Exp Real)
    -> InputArg (DetuneModulation Real) (Exp Real)
    -> SampleRate (Exp Real)
    -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
-> SampleRate (Exp Real)
-> Unwrapped
     ((InputArg (Control (T RealValue)) (Exp Real),
       InputArg (Control (T RealValue)) (Exp Real))
      -> Arg Number (Exp Real)
      -> InputArg (DetuneModulation Real) (Exp Real)
      -> SampleRate (Exp Real)
      -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
forall a b. (a -> b) -> a -> b
$ \(Control T (T RealValue)
index, Control T (T RealValue)
depth)
          (Number Exp Real
vel) (DetuneModulation (T (T RealValue), T (T (T RealValue)))
fm) ->
       (SampleRate (Exp Real) -> Exp Real -> Exp Real)
-> Exp Real
-> (Exp Real
    -> SampleRate (Exp Real)
    -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
-> SampleRate (Exp Real)
-> T (Serial VectorSize 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 (Serial VectorSize Real) (T (T (T VectorSize Real))))
 -> SampleRate (Exp Real)
 -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
-> (Exp Real
    -> SampleRate (Exp Real)
    -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
-> SampleRate (Exp Real)
-> T (Serial VectorSize Real) (T (T (T VectorSize Real)))
forall a b. (a -> b) -> a -> b
$ \Exp Real
speed SampleRate (Exp Real)
sr ->
         T (Serial VectorSize Real) -> T (T (T VectorSize Real))
forall a. T (T a) -> T (T a)
Stereo.multiValue (T (Serial VectorSize Real) -> T (T (T VectorSize Real)))
-> T (Serial VectorSize Real, T (Serial VectorSize Real))
     (T (Serial VectorSize Real))
-> T (Serial VectorSize Real, T (Serial VectorSize Real))
     (T (T (T VectorSize Real)))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$>
         T (Serial VectorSize Real, T (Serial VectorSize Real))
  (T (Serial VectorSize Real))
forall a. PseudoRing a => T (a, T a) (T a)
Causal.envelopeStereo T (Serial VectorSize Real, T (Serial VectorSize Real))
  (T (T (T VectorSize Real)))
-> SignalOf T (T (Serial VectorSize Real))
-> T (Serial VectorSize Real) (T (T (T VectorSize Real)))
forall (process :: * -> * -> *) a b c.
C process =>
process (a, b) c -> SignalOf process b -> process a c
$>
            (T (T RealValue)
-> T (T RealValue)
-> Exp Real
-> SampleRate (Exp Real)
-> T (T (Serial VectorSize Real)) (T (Serial VectorSize Real))
tineControlledFnProc T (T RealValue)
index T (T RealValue)
depth Exp Real
vel SampleRate (Exp Real)
sr T (T (Serial VectorSize Real)) (T (Serial VectorSize Real))
-> SignalOf T (T (Serial VectorSize Real))
-> SignalOf T (T (Serial VectorSize Real))
forall (process :: * -> * -> *) a b.
C process =>
process a b -> SignalOf process a -> SignalOf process b
$*
             Exp Real
-> (T (T RealValue), T (T (T RealValue)))
-> T (T (Serial VectorSize Real))
stereoFrequenciesFromDetuneBendModulation Exp Real
speed (T (T RealValue), T (T (T RealValue)))
fm))
      IO
  (Real
   -> Real
   -> ChunkSize
   -> SampleRate Real
   -> Real
   -> LazyTime
   -> Vector (T VectorSize Real))
pingReleaseEnvelope


fenderProc ::
   Sig.T (Const.T RealValue) ->
   Sig.T (Const.T RealValue) ->
   Sig.T (Const.T RealValue) ->
   Exp Real ->
   SampleRate (Exp Real) ->
   Causal.T (Stereo.T VectorValue) (Stereo.T VectorValue)
fenderProc :: T (T RealValue)
-> T (T RealValue)
-> T (T RealValue)
-> Exp Real
-> SampleRate (Exp Real)
-> T (T (Serial VectorSize Real)) (T (Serial VectorSize Real))
fenderProc T (T RealValue)
fade T (T RealValue)
index T (T RealValue)
depth Exp Real
vel = (SampleRate (Exp Real) -> Exp Real -> Exp Real)
-> Exp Real
-> (Exp Real
    -> SampleRate (Exp Real)
    -> T (T (Serial VectorSize Real)) (T (Serial VectorSize Real)))
-> SampleRate (Exp Real)
-> T (T (Serial VectorSize Real)) (T (Serial 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 (Serial VectorSize Real)) (T (Serial VectorSize Real)))
 -> SampleRate (Exp Real)
 -> T (T (Serial VectorSize Real)) (T (Serial VectorSize Real)))
-> (Exp Real
    -> SampleRate (Exp Real)
    -> T (T (Serial VectorSize Real)) (T (Serial VectorSize Real)))
-> SampleRate (Exp Real)
-> T (T (Serial VectorSize Real)) (T (Serial VectorSize Real))
forall a b. (a -> b) -> a -> b
$ \Exp Real
halfLife SampleRate (Exp Real)
_sr ->
   Atom (T (Serial VectorSize Real))
-> (GuidedArguments
      (T (T (Serial VectorSize Real)))
      (Atom (T (Serial VectorSize Real)))
    -> T (T (Serial VectorSize Real)) (T (Serial VectorSize Real)))
-> T (T (Serial VectorSize Real)) (T (Serial VectorSize Real))
forall pat inp out.
(MakeGuidedArguments pat, PatternArguments pat ~ inp) =>
pat -> (GuidedArguments (T inp) pat -> T inp out) -> T inp out
F.withGuidedArgs Atom (T (Serial VectorSize Real))
forall a. Atom a
F.atom ((GuidedArguments
    (T (T (Serial VectorSize Real)))
    (Atom (T (Serial VectorSize Real)))
  -> T (T (Serial VectorSize Real)) (T (Serial VectorSize Real)))
 -> T (T (Serial VectorSize Real)) (T (Serial VectorSize Real)))
-> (GuidedArguments
      (T (T (Serial VectorSize Real)))
      (Atom (T (Serial VectorSize Real)))
    -> T (T (Serial VectorSize Real)) (T (Serial VectorSize Real)))
-> T (T (Serial VectorSize Real)) (T (Serial VectorSize Real))
forall a b. (a -> b) -> a -> b
$ \GuidedArguments
  (T (T (Serial VectorSize Real)))
  (Atom (T (Serial VectorSize Real)))
stereoFreq ->
       let channel_n_1 ::
              F.T VectorValue VectorValue ->
              F.T VectorValue VectorValue
           channel_n_1 :: T (Serial VectorSize Real) (Serial VectorSize Real)
-> T (Serial VectorSize Real) (Serial VectorSize Real)
channel_n_1 T (Serial VectorSize Real) (Serial VectorSize Real)
freq =
              (forall r.
 Serial VectorSize Real
 -> CodeGenFunction r (Serial VectorSize Real))
-> T (Serial VectorSize Real, Serial VectorSize Real)
     (Serial 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 Serial VectorSize Real
-> CodeGenFunction r (Serial VectorSize Real)
forall r.
Serial VectorSize Real
-> CodeGenFunction r (Serial VectorSize Real)
forall a r.
(PseudoRing a, IntegerConstant a, Fraction a) =>
a -> CodeGenFunction r a
WaveL.approxSine2
              T (Serial VectorSize Real, Serial VectorSize Real)
  (Serial VectorSize Real)
-> T (Serial VectorSize Real)
     (Serial VectorSize Real, Serial VectorSize Real)
-> T (Serial VectorSize Real) (Serial VectorSize Real)
forall b c a. T b c -> T a b -> T a c
$&
              ((T (Serial VectorSize Real, Serial VectorSize Real)
  (Serial VectorSize Real)
forall a. PseudoRing a => T (a, a) a
Causal.envelope
                  T (Serial VectorSize Real, Serial VectorSize Real)
  (Serial VectorSize Real)
-> SignalOf T (Serial VectorSize Real)
-> T (Serial VectorSize Real) (Serial VectorSize Real)
forall (process :: * -> * -> *) a b c.
C process =>
process (a, b) c -> SignalOf process a -> process b c
$< (T (T RealValue) -> T (Serial VectorSize Real)
piecewiseConstantVector T (T RealValue)
depth
                      T (Serial VectorSize Real)
-> T (Serial VectorSize Real) -> T (Serial VectorSize Real)
forall a. C a => a -> a -> a
*
                      Exp Real -> Exp Real -> T (Serial 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
velExp Real -> Exp Real -> Exp Real
forall a. C a => a -> a -> a
+Exp Real
1)))
               T (Serial VectorSize Real) (Serial VectorSize Real)
-> T (Serial VectorSize Real) (Serial VectorSize Real)
-> T (Serial VectorSize Real) (Serial VectorSize Real)
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
<<<
               ((forall r.
 Serial VectorSize Real
 -> CodeGenFunction r (Serial VectorSize Real))
-> T (Serial VectorSize Real, Serial VectorSize Real)
     (Serial 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 Serial VectorSize Real
-> CodeGenFunction r (Serial VectorSize Real)
forall r.
Serial VectorSize Real
-> CodeGenFunction r (Serial VectorSize Real)
forall a r.
(PseudoRing a, IntegerConstant a, Fraction a) =>
a -> CodeGenFunction r a
WaveL.approxSine2 T (Serial VectorSize Real, Serial VectorSize Real)
  (Serial VectorSize Real)
-> SignalOf T (Serial VectorSize Real)
-> T (Serial VectorSize Real) (Serial VectorSize Real)
forall (process :: * -> * -> *) a b c.
C process =>
process (a, b) c -> SignalOf process a -> process b c
$< SignalOf T (Serial VectorSize Real)
T (Serial VectorSize Real)
forall a. C a => a
zero)
               T (Serial VectorSize Real) (Serial VectorSize Real)
-> T (Serial VectorSize Real) (Serial VectorSize Real)
-> T (Serial VectorSize Real) (Serial VectorSize Real)
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
<<<
               (T (Serial VectorSize Real, Serial VectorSize Real)
  (Serial VectorSize Real)
forall a. PseudoRing a => T (a, a) a
Causal.envelope T (Serial VectorSize Real, Serial VectorSize Real)
  (Serial VectorSize Real)
-> SignalOf T (Serial VectorSize Real)
-> T (Serial VectorSize Real) (Serial VectorSize Real)
forall (process :: * -> * -> *) a b c.
C process =>
process (a, b) c -> SignalOf process a -> process b c
$< T (T RealValue) -> T (Serial VectorSize Real)
piecewiseConstantVector T (T RealValue)
index)
               T (Serial VectorSize Real) (Serial VectorSize Real)
-> T (Serial VectorSize Real) (Serial VectorSize Real)
-> T (Serial VectorSize Real) (Serial VectorSize Real)
forall b c a. T b c -> T a b -> T a c
$&
               T (Serial VectorSize Real) (Serial VectorSize Real)
freq)
              T (Serial VectorSize Real) (Serial VectorSize Real)
-> T (Serial VectorSize Real) (Serial VectorSize Real)
-> T (Serial VectorSize Real)
     (Serial VectorSize Real, Serial VectorSize Real)
forall a b c. T a b -> T a c -> T a (b, c)
&|&
              T (Serial VectorSize Real) (Serial VectorSize Real)
freq
           channel_1_2 ::
              F.T VectorValue VectorValue ->
              F.T VectorValue VectorValue
           channel_1_2 :: T (Serial VectorSize Real) (Serial VectorSize Real)
-> T (Serial VectorSize Real) (Serial VectorSize Real)
channel_1_2 T (Serial VectorSize Real) (Serial VectorSize Real)
freq =
              (forall r.
 Serial VectorSize Real
 -> CodeGenFunction r (Serial VectorSize Real))
-> T (Serial VectorSize Real, Serial VectorSize Real)
     (Serial 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 Serial VectorSize Real
-> CodeGenFunction r (Serial VectorSize Real)
forall r.
Serial VectorSize Real
-> CodeGenFunction r (Serial VectorSize Real)
forall a r.
(PseudoRing a, IntegerConstant a, Fraction a) =>
a -> CodeGenFunction r a
WaveL.approxSine2
              T (Serial VectorSize Real, Serial VectorSize Real)
  (Serial VectorSize Real)
-> T (Serial VectorSize Real)
     (Serial VectorSize Real, Serial VectorSize Real)
-> T (Serial VectorSize Real) (Serial VectorSize Real)
forall b c a. T b c -> T a b -> T a c
$&
              ((T (Serial VectorSize Real, Serial VectorSize Real)
  (Serial VectorSize Real)
forall a. PseudoRing a => T (a, a) a
Causal.envelope
                  T (Serial VectorSize Real, Serial VectorSize Real)
  (Serial VectorSize Real)
-> SignalOf T (Serial VectorSize Real)
-> T (Serial VectorSize Real) (Serial VectorSize Real)
forall (process :: * -> * -> *) a b c.
C process =>
process (a, b) c -> SignalOf process a -> process b c
$< (T (T RealValue) -> T (Serial VectorSize Real)
piecewiseConstantVector T (T RealValue)
depth
                      T (Serial VectorSize Real)
-> T (Serial VectorSize Real) -> T (Serial VectorSize Real)
forall a. C a => a -> a -> a
*
                      Exp Real -> Exp Real -> T (Serial 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
velExp Real -> Exp Real -> Exp Real
forall a. C a => a -> a -> a
+Exp Real
1)))
               T (Serial VectorSize Real) (Serial VectorSize Real)
-> T (Serial VectorSize Real) (Serial VectorSize Real)
-> T (Serial VectorSize Real) (Serial VectorSize Real)
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
<<<
               ((forall r.
 Serial VectorSize Real
 -> CodeGenFunction r (Serial VectorSize Real))
-> T (Serial VectorSize Real, Serial VectorSize Real)
     (Serial 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 Serial VectorSize Real
-> CodeGenFunction r (Serial VectorSize Real)
forall r.
Serial VectorSize Real
-> CodeGenFunction r (Serial VectorSize Real)
forall a r.
(PseudoRing a, IntegerConstant a, Fraction a) =>
a -> CodeGenFunction r a
WaveL.approxSine2 T (Serial VectorSize Real, Serial VectorSize Real)
  (Serial VectorSize Real)
-> SignalOf T (Serial VectorSize Real)
-> T (Serial VectorSize Real) (Serial VectorSize Real)
forall (process :: * -> * -> *) a b c.
C process =>
process (a, b) c -> SignalOf process a -> process b c
$< SignalOf T (Serial VectorSize Real)
T (Serial VectorSize Real)
forall a. C a => a
zero)
               T (Serial VectorSize Real) (Serial VectorSize Real)
-> T (Serial VectorSize Real) (Serial VectorSize Real)
-> T (Serial VectorSize Real) (Serial VectorSize Real)
forall b c a. T b c -> T a b -> T a c
$&
               T (Serial VectorSize Real) (Serial VectorSize Real)
freq)
              T (Serial VectorSize Real) (Serial VectorSize Real)
-> T (Serial VectorSize Real) (Serial VectorSize Real)
-> T (Serial VectorSize Real)
     (Serial VectorSize Real, Serial VectorSize Real)
forall a b c. T a b -> T a c -> T a (b, c)
&|&
              (Exp Real -> T (Serial VectorSize Real) (Serial VectorSize Real)
forall n a.
(Positive n, PseudoRing a) =>
Exp a -> T (Serial n a) (Serial n a)
CausalPS.amplify Exp Real
2 T (Serial VectorSize Real) (Serial VectorSize Real)
-> T (Serial VectorSize Real) (Serial VectorSize Real)
-> T (Serial VectorSize Real) (Serial VectorSize Real)
forall b c a. T b c -> T a b -> T a c
$& T (Serial VectorSize Real) (Serial VectorSize Real)
freq)
       in  (T (Serial VectorSize Real, Serial VectorSize Real)
  (Serial VectorSize Real)
-> T (Serial VectorSize Real, T (Serial VectorSize Real))
     (T (Serial 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 (Serial VectorSize Real) (Serial VectorSize Real)
-> T (Serial VectorSize Real) (Serial VectorSize Real)
-> T (Serial VectorSize Real, Serial VectorSize Real)
     (Serial VectorSize Real)
forall v a.
(PseudoRing v, IntegerConstant v) =>
T a v -> T a v -> T (v, a) v
fadeProcess
                 (T (Serial VectorSize Real) (Serial VectorSize Real)
-> T (Serial VectorSize Real) (Serial VectorSize Real)
forall inp out. T inp out -> T inp out
F.compile (T (Serial VectorSize Real) (Serial VectorSize Real)
 -> T (Serial VectorSize Real) (Serial VectorSize Real))
-> T (Serial VectorSize Real) (Serial VectorSize Real)
-> T (Serial VectorSize Real) (Serial VectorSize Real)
forall a b. (a -> b) -> a -> b
$ T (Serial VectorSize Real) (Serial VectorSize Real)
-> T (Serial VectorSize Real) (Serial VectorSize Real)
channel_n_1 (T (Serial VectorSize Real) (Serial VectorSize Real)
 -> T (Serial VectorSize Real) (Serial VectorSize Real))
-> T (Serial VectorSize Real) (Serial VectorSize Real)
-> T (Serial VectorSize Real) (Serial VectorSize Real)
forall a b. (a -> b) -> a -> b
$ T (Serial VectorSize Real) (Serial VectorSize Real)
-> T (Serial VectorSize Real) (Serial VectorSize Real)
forall inp out. T inp out -> T inp out
F.lift T (Serial VectorSize Real) (Serial VectorSize Real)
forall a. T a a
forall {k} (cat :: k -> k -> *) (a :: k). Category cat => cat a a
id)
                 (T (Serial VectorSize Real) (Serial VectorSize Real)
-> T (Serial VectorSize Real) (Serial VectorSize Real)
forall inp out. T inp out -> T inp out
F.compile (T (Serial VectorSize Real) (Serial VectorSize Real)
 -> T (Serial VectorSize Real) (Serial VectorSize Real))
-> T (Serial VectorSize Real) (Serial VectorSize Real)
-> T (Serial VectorSize Real) (Serial VectorSize Real)
forall a b. (a -> b) -> a -> b
$ T (Serial VectorSize Real) (Serial VectorSize Real)
-> T (Serial VectorSize Real) (Serial VectorSize Real)
channel_1_2 (T (Serial VectorSize Real) (Serial VectorSize Real)
 -> T (Serial VectorSize Real) (Serial VectorSize Real))
-> T (Serial VectorSize Real) (Serial VectorSize Real)
-> T (Serial VectorSize Real) (Serial VectorSize Real)
forall a b. (a -> b) -> a -> b
$ T (Serial VectorSize Real) (Serial VectorSize Real)
-> T (Serial VectorSize Real) (Serial VectorSize Real)
forall inp out. T inp out -> T inp out
F.lift T (Serial VectorSize Real) (Serial VectorSize Real)
forall a. T a a
forall {k} (cat :: k -> k -> *) (a :: k). Category cat => cat a a
id))
              T (Serial VectorSize Real, T (Serial VectorSize Real))
  (T (Serial VectorSize Real))
-> SignalOf T (Serial VectorSize Real)
-> T (T (Serial VectorSize Real)) (T (Serial VectorSize Real))
forall (process :: * -> * -> *) a b c.
C process =>
process (a, b) c -> SignalOf process a -> process b c
$< T (T RealValue) -> T (Serial VectorSize Real)
piecewiseConstantVector T (T RealValue)
fade)
           T (T (Serial VectorSize Real)) (T (Serial VectorSize Real))
-> T (T (Serial VectorSize Real)) (T (Serial VectorSize Real))
-> T (T (Serial VectorSize Real)) (T (Serial VectorSize Real))
forall b c a. T b c -> T a b -> T a c
$&
           GuidedArguments
  (T (T (Serial VectorSize Real)))
  (Atom (T (Serial VectorSize Real)))
T (T (Serial VectorSize Real)) (T (Serial VectorSize Real))
stereoFreq

fenderFM ::
   IO (Real -> Real ->
       PC.T Real ->
       PC.T Real -> PC.T Real -> PC.T Real ->
       SigSt.ChunkSize ->
       PC.T (BM.T Real) ->
       Instrument Real (Stereo.T Vector))
fenderFM :: IO
  (Real
   -> Real
   -> T Real
   -> T Real
   -> T Real
   -> T Real
   -> ChunkSize
   -> T (T Real)
   -> Instrument Real (T (T VectorSize Real)))
fenderFM =
   ((SampleRate Real
  -> (T Real, T Real)
  -> T Real
  -> Real
  -> (T Real, T (T Real), Real)
  -> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real))))
 -> (Real
     -> Real
     -> ChunkSize
     -> SampleRate Real
     -> Real
     -> LazyTime
     -> Vector (T VectorSize Real))
 -> Real
 -> Real
 -> T Real
 -> T Real
 -> T Real
 -> T Real
 -> ChunkSize
 -> T (T Real)
 -> Instrument Real (T (T VectorSize Real)))
-> IO
     (SampleRate Real
      -> (T Real, T Real)
      -> T Real
      -> Real
      -> (T Real, T (T Real), Real)
      -> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real))))
-> IO
     (Real
      -> Real
      -> ChunkSize
      -> SampleRate Real
      -> Real
      -> LazyTime
      -> Vector (T VectorSize Real))
-> IO
     (Real
      -> Real
      -> T Real
      -> T Real
      -> T Real
      -> T Real
      -> ChunkSize
      -> T (T Real)
      -> Instrument Real (T (T VectorSize Real)))
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 Real, T Real)
-> T Real
-> Real
-> (T Real, T (T Real), Real)
-> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real)))
osc Real
-> Real
-> ChunkSize
-> SampleRate Real
-> Real
-> LazyTime
-> Vector (T VectorSize Real)
env Real
dec Real
rel T Real
detune T Real
index T Real
depth T Real
fade ChunkSize
vcsize T (T Real)
fm SampleRate Real
sr Real
vel Real
freq LazyTime
dur ->
         T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real)))
-> Vector (T VectorSize Real) -> T (T (T VectorSize Real))
forall a b.
(Storable a, Storable b) =>
T (Vector a) (Vector b) -> Vector a -> Vector b
pioApply
            (SampleRate Real
-> (T Real, T Real)
-> T Real
-> Real
-> (T Real, T (T Real), Real)
-> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real)))
osc SampleRate Real
sr (T Real
index, T Real
depth) T Real
fade Real
vel (T Real
detune, T (T Real)
fm, Real
freq))
            (Real
-> Real
-> ChunkSize
-> SampleRate Real
-> Real
-> LazyTime
-> Vector (T VectorSize Real)
env Real
dec Real
rel ChunkSize
vcsize SampleRate Real
sr Real
0 LazyTime
dur))
      (DSL
  (SampleRate Real
   -> (T Real, T Real)
   -> T Real
   -> Real
   -> (T Real, T (T Real), Real)
   -> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real))))
  (Element
     (In
        (SampleRate Real
         -> (T Real, T Real)
         -> T Real
         -> Real
         -> (T Real, T (T Real), Real)
         -> T (Vector (T VectorSize Real))
              (Vector (T (T VectorSize Real))))))
  (Element
     (Out
        (SampleRate Real
         -> (T Real, T Real)
         -> T Real
         -> Real
         -> (T Real, T (T Real), Real)
         -> T (Vector (T VectorSize Real))
              (Vector (T (T VectorSize Real))))))
-> IO
     (SampleRate Real
      -> (T Real, T Real)
      -> T Real
      -> Real
      -> (T Real, T (T Real), Real)
      -> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real))))
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 Real, T Real)
    -> T Real
    -> Real
    -> (T Real, T (T Real), Real)
    -> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real))))
   (Element
      (In
         (SampleRate Real
          -> (T Real, T Real)
          -> T Real
          -> Real
          -> (T Real, T (T Real), Real)
          -> T (Vector (T VectorSize Real))
               (Vector (T (T VectorSize Real))))))
   (Element
      (Out
         (SampleRate Real
          -> (T Real, T Real)
          -> T Real
          -> Real
          -> (T Real, T (T Real), Real)
          -> T (Vector (T VectorSize Real))
               (Vector (T (T VectorSize Real))))))
 -> IO
      (SampleRate Real
       -> (T Real, T Real)
       -> T Real
       -> Real
       -> (T Real, T (T Real), Real)
       -> T (Vector (T VectorSize Real))
            (Vector (T (T VectorSize Real)))))
-> DSL
     (SampleRate Real
      -> (T Real, T Real)
      -> T Real
      -> Real
      -> (T Real, T (T Real), Real)
      -> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real))))
     (Element
        (In
           (SampleRate Real
            -> (T Real, T Real)
            -> T Real
            -> Real
            -> (T Real, T (T Real), Real)
            -> T (Vector (T VectorSize Real))
                 (Vector (T (T VectorSize Real))))))
     (Element
        (Out
           (SampleRate Real
            -> (T Real, T Real)
            -> T Real
            -> Real
            -> (T Real, T (T Real), Real)
            -> T (Vector (T VectorSize Real))
                 (Vector (T (T VectorSize Real))))))
-> IO
     (SampleRate Real
      -> (T Real, T Real)
      -> T Real
      -> Real
      -> (T Real, T (T Real), Real)
      -> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real))))
forall a b. (a -> b) -> a -> b
$
       ((InputArg (Control (T RealValue)) (Exp Real),
  InputArg (Control (T RealValue)) (Exp Real))
 -> InputArg (Control (T RealValue)) (Exp Real)
 -> Arg Number (Exp Real)
 -> InputArg (DetuneModulation Real) (Exp Real)
 -> SampleRate (Exp Real)
 -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
-> SampleRate (Exp Real)
-> Unwrapped
     ((InputArg (Control (T RealValue)) (Exp Real),
       InputArg (Control (T RealValue)) (Exp Real))
      -> InputArg (Control (T RealValue)) (Exp Real)
      -> Arg Number (Exp Real)
      -> InputArg (DetuneModulation Real) (Exp Real)
      -> SampleRate (Exp Real)
      -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
forall a f. Wrapped a f => f -> SampleRate a -> Unwrapped f
wrapped (((InputArg (Control (T RealValue)) (Exp Real),
   InputArg (Control (T RealValue)) (Exp Real))
  -> InputArg (Control (T RealValue)) (Exp Real)
  -> Arg Number (Exp Real)
  -> InputArg (DetuneModulation Real) (Exp Real)
  -> SampleRate (Exp Real)
  -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
 -> SampleRate (Exp Real)
 -> Unwrapped
      ((InputArg (Control (T RealValue)) (Exp Real),
        InputArg (Control (T RealValue)) (Exp Real))
       -> InputArg (Control (T RealValue)) (Exp Real)
       -> Arg Number (Exp Real)
       -> InputArg (DetuneModulation Real) (Exp Real)
       -> SampleRate (Exp Real)
       -> T (Serial VectorSize Real) (T (T (T VectorSize Real)))))
-> ((InputArg (Control (T RealValue)) (Exp Real),
     InputArg (Control (T RealValue)) (Exp Real))
    -> InputArg (Control (T RealValue)) (Exp Real)
    -> Arg Number (Exp Real)
    -> InputArg (DetuneModulation Real) (Exp Real)
    -> SampleRate (Exp Real)
    -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
-> SampleRate (Exp Real)
-> Unwrapped
     ((InputArg (Control (T RealValue)) (Exp Real),
       InputArg (Control (T RealValue)) (Exp Real))
      -> InputArg (Control (T RealValue)) (Exp Real)
      -> Arg Number (Exp Real)
      -> InputArg (DetuneModulation Real) (Exp Real)
      -> SampleRate (Exp Real)
      -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
forall a b. (a -> b) -> a -> b
$ \(Control T (T RealValue)
index, Control T (T RealValue)
depth) (Control T (T RealValue)
fade)
            (Number Exp Real
vel) (DetuneModulation (T (T RealValue), T (T (T RealValue)))
fm) ->
       (SampleRate (Exp Real) -> Exp Real -> Exp Real)
-> Exp Real
-> (Exp Real
    -> SampleRate (Exp Real)
    -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
-> SampleRate (Exp Real)
-> T (Serial VectorSize 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 (Serial VectorSize Real) (T (T (T VectorSize Real))))
 -> SampleRate (Exp Real)
 -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
-> (Exp Real
    -> SampleRate (Exp Real)
    -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
-> SampleRate (Exp Real)
-> T (Serial VectorSize Real) (T (T (T VectorSize Real)))
forall a b. (a -> b) -> a -> b
$ \Exp Real
speed SampleRate (Exp Real)
sr ->
         T (Serial VectorSize Real) -> T (T (T VectorSize Real))
forall a. T (T a) -> T (T a)
Stereo.multiValue (T (Serial VectorSize Real) -> T (T (T VectorSize Real)))
-> T (Serial VectorSize Real, T (Serial VectorSize Real))
     (T (Serial VectorSize Real))
-> T (Serial VectorSize Real, T (Serial VectorSize Real))
     (T (T (T VectorSize Real)))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$>
         T (Serial VectorSize Real, T (Serial VectorSize Real))
  (T (Serial VectorSize Real))
forall a. PseudoRing a => T (a, T a) (T a)
Causal.envelopeStereo T (Serial VectorSize Real, T (Serial VectorSize Real))
  (T (T (T VectorSize Real)))
-> SignalOf T (T (Serial VectorSize Real))
-> T (Serial VectorSize Real) (T (T (T VectorSize Real)))
forall (process :: * -> * -> *) a b c.
C process =>
process (a, b) c -> SignalOf process b -> process a c
$>
            (T (T RealValue)
-> T (T RealValue)
-> T (T RealValue)
-> Exp Real
-> SampleRate (Exp Real)
-> T (T (Serial VectorSize Real)) (T (Serial VectorSize Real))
fenderProc T (T RealValue)
fade T (T RealValue)
index T (T RealValue)
depth Exp Real
vel SampleRate (Exp Real)
sr T (T (Serial VectorSize Real)) (T (Serial VectorSize Real))
-> SignalOf T (T (Serial VectorSize Real))
-> SignalOf T (T (Serial VectorSize Real))
forall (process :: * -> * -> *) a b.
C process =>
process a b -> SignalOf process a -> SignalOf process b
$*
             Exp Real
-> (T (T RealValue), T (T (T RealValue)))
-> T (T (Serial VectorSize Real))
stereoFrequenciesFromDetuneBendModulation Exp Real
speed (T (T RealValue), T (T (T RealValue)))
fm))
      IO
  (Real
   -> Real
   -> ChunkSize
   -> SampleRate Real
   -> Real
   -> LazyTime
   -> Vector (T VectorSize Real))
pingReleaseEnvelope


fmModulator ::
   Exp Real ->
   Exp Real ->
   Sig.T (Const.T RealValue) ->
   SampleRate (Exp Real) ->
   Causal.T (Stereo.T VectorValue) (Stereo.T VectorValue)
fmModulator :: Exp Real
-> Exp Real
-> T (T RealValue)
-> SampleRate (Exp Real)
-> T (T (Serial VectorSize Real)) (T (Serial VectorSize Real))
fmModulator Exp Real
vel Exp Real
n T (T RealValue)
depth = (SampleRate (Exp Real) -> Exp Real -> Exp Real)
-> Exp Real
-> (Exp Real
    -> SampleRate (Exp Real)
    -> T (T (Serial VectorSize Real)) (T (Serial VectorSize Real)))
-> SampleRate (Exp Real)
-> T (T (Serial VectorSize Real)) (T (Serial 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 (Serial VectorSize Real)) (T (Serial VectorSize Real)))
 -> SampleRate (Exp Real)
 -> T (T (Serial VectorSize Real)) (T (Serial VectorSize Real)))
-> (Exp Real
    -> SampleRate (Exp Real)
    -> T (T (Serial VectorSize Real)) (T (Serial VectorSize Real)))
-> SampleRate (Exp Real)
-> T (T (Serial VectorSize Real)) (T (Serial VectorSize Real))
forall a b. (a -> b) -> a -> b
$ \Exp Real
halfLife SampleRate (Exp Real)
_sr ->
   (T (Serial VectorSize Real, T (Serial VectorSize Real))
  (T (Serial VectorSize Real))
forall a. PseudoRing a => T (a, T a) (T a)
Causal.envelopeStereo
      T (Serial VectorSize Real, T (Serial VectorSize Real))
  (T (Serial VectorSize Real))
-> SignalOf T (Serial VectorSize Real)
-> T (T (Serial VectorSize Real)) (T (Serial VectorSize Real))
forall (process :: * -> * -> *) a b c.
C process =>
process (a, b) c -> SignalOf process a -> process b c
$< (T (T RealValue) -> T (Serial VectorSize Real)
piecewiseConstantVector T (T RealValue)
depth
          T (Serial VectorSize Real)
-> T (Serial VectorSize Real) -> T (Serial VectorSize Real)
forall a. C a => a -> a -> a
*
          Exp Real -> Exp Real -> T (Serial 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
velExp Real -> Exp Real -> Exp Real
forall a. C a => a -> a -> a
+Exp Real
1)))
   T (T (Serial VectorSize Real)) (T (Serial VectorSize Real))
-> T (T (Serial VectorSize Real)) (T (Serial VectorSize Real))
-> T (T (Serial VectorSize Real)) (T (Serial VectorSize Real))
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
<<<
   T (Serial VectorSize Real) (Serial VectorSize Real)
-> T (T (Serial VectorSize Real)) (T (Serial 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.
 Serial VectorSize Real
 -> CodeGenFunction r (Serial VectorSize Real))
-> T (Serial VectorSize Real, Serial VectorSize Real)
     (Serial 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 Serial VectorSize Real
-> CodeGenFunction r (Serial VectorSize Real)
forall r.
Serial VectorSize Real
-> CodeGenFunction r (Serial VectorSize Real)
forall a r.
(PseudoRing a, IntegerConstant a, Fraction a) =>
a -> CodeGenFunction r a
WaveL.approxSine2 T (Serial VectorSize Real, Serial VectorSize Real)
  (Serial VectorSize Real)
-> SignalOf T (Serial VectorSize Real)
-> T (Serial VectorSize Real) (Serial VectorSize Real)
forall (process :: * -> * -> *) a b c.
C process =>
process (a, b) c -> SignalOf process a -> process b c
$< SignalOf T (Serial VectorSize Real)
T (Serial VectorSize Real)
forall a. C a => a
zero)
   T (T (Serial VectorSize Real)) (T (Serial VectorSize Real))
-> T (T (Serial VectorSize Real)) (T (Serial VectorSize Real))
-> T (T (Serial VectorSize Real)) (T (Serial VectorSize Real))
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 (Serial VectorSize Real)) (T (Serial 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

tineModulatorBankFM ::
   IO (Real -> Real ->
       PC.T Real ->
       PC.T Real -> PC.T Real -> PC.T Real -> PC.T Real ->
       SigSt.ChunkSize ->
       PC.T (BM.T Real) ->
       Instrument Real (Stereo.T Vector))
tineModulatorBankFM :: IO
  (Real
   -> Real
   -> T Real
   -> T Real
   -> T Real
   -> T Real
   -> T Real
   -> ChunkSize
   -> T (T Real)
   -> Instrument Real (T (T VectorSize Real)))
tineModulatorBankFM =
   ((SampleRate Real
  -> T Real
  -> T Real
  -> T Real
  -> T Real
  -> Real
  -> (T Real, T (T Real), Real)
  -> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real))))
 -> (Real
     -> Real
     -> ChunkSize
     -> SampleRate Real
     -> Real
     -> LazyTime
     -> Vector (T VectorSize Real))
 -> Real
 -> Real
 -> T Real
 -> T Real
 -> T Real
 -> T Real
 -> T Real
 -> ChunkSize
 -> T (T Real)
 -> Instrument Real (T (T VectorSize Real)))
-> IO
     (SampleRate Real
      -> T Real
      -> T Real
      -> T Real
      -> T Real
      -> Real
      -> (T Real, T (T Real), Real)
      -> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real))))
-> IO
     (Real
      -> Real
      -> ChunkSize
      -> SampleRate Real
      -> Real
      -> LazyTime
      -> Vector (T VectorSize Real))
-> IO
     (Real
      -> Real
      -> T Real
      -> T Real
      -> T Real
      -> T Real
      -> T Real
      -> ChunkSize
      -> T (T Real)
      -> Instrument Real (T (T VectorSize Real)))
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 Real
-> T Real
-> T Real
-> T Real
-> Real
-> (T Real, T (T Real), Real)
-> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real)))
osc Real
-> Real
-> ChunkSize
-> SampleRate Real
-> Real
-> LazyTime
-> Vector (T VectorSize Real)
env
            Real
dec Real
rel T Real
detune
            T Real
depth1 T Real
depth2 T Real
depth3 T Real
depth4
            ChunkSize
vcsize T (T Real)
fm SampleRate Real
sr Real
vel Real
freq LazyTime
dur ->
         T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real)))
-> Vector (T VectorSize Real) -> T (T (T VectorSize Real))
forall a b.
(Storable a, Storable b) =>
T (Vector a) (Vector b) -> Vector a -> Vector b
pioApply
            (SampleRate Real
-> T Real
-> T Real
-> T Real
-> T Real
-> Real
-> (T Real, T (T Real), Real)
-> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real)))
osc SampleRate Real
sr T Real
depth1 T Real
depth2 T Real
depth3 T Real
depth4 Real
vel (T Real
detune, T (T Real)
fm, Real
freq))
            (Real
-> Real
-> ChunkSize
-> SampleRate Real
-> Real
-> LazyTime
-> Vector (T VectorSize Real)
env Real
dec Real
rel ChunkSize
vcsize SampleRate Real
sr Real
0 LazyTime
dur))
      (DSL
  (SampleRate Real
   -> T Real
   -> T Real
   -> T Real
   -> T Real
   -> Real
   -> (T Real, T (T Real), Real)
   -> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real))))
  (Element
     (In
        (SampleRate Real
         -> T Real
         -> T Real
         -> T Real
         -> T Real
         -> Real
         -> (T Real, T (T Real), Real)
         -> T (Vector (T VectorSize Real))
              (Vector (T (T VectorSize Real))))))
  (Element
     (Out
        (SampleRate Real
         -> T Real
         -> T Real
         -> T Real
         -> T Real
         -> Real
         -> (T Real, T (T Real), Real)
         -> T (Vector (T VectorSize Real))
              (Vector (T (T VectorSize Real))))))
-> IO
     (SampleRate Real
      -> T Real
      -> T Real
      -> T Real
      -> T Real
      -> Real
      -> (T Real, T (T Real), Real)
      -> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real))))
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 Real
    -> T Real
    -> T Real
    -> T Real
    -> Real
    -> (T Real, T (T Real), Real)
    -> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real))))
   (Element
      (In
         (SampleRate Real
          -> T Real
          -> T Real
          -> T Real
          -> T Real
          -> Real
          -> (T Real, T (T Real), Real)
          -> T (Vector (T VectorSize Real))
               (Vector (T (T VectorSize Real))))))
   (Element
      (Out
         (SampleRate Real
          -> T Real
          -> T Real
          -> T Real
          -> T Real
          -> Real
          -> (T Real, T (T Real), Real)
          -> T (Vector (T VectorSize Real))
               (Vector (T (T VectorSize Real))))))
 -> IO
      (SampleRate Real
       -> T Real
       -> T Real
       -> T Real
       -> T Real
       -> Real
       -> (T Real, T (T Real), Real)
       -> T (Vector (T VectorSize Real))
            (Vector (T (T VectorSize Real)))))
-> DSL
     (SampleRate Real
      -> T Real
      -> T Real
      -> T Real
      -> T Real
      -> Real
      -> (T Real, T (T Real), Real)
      -> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real))))
     (Element
        (In
           (SampleRate Real
            -> T Real
            -> T Real
            -> T Real
            -> T Real
            -> Real
            -> (T Real, T (T Real), Real)
            -> T (Vector (T VectorSize Real))
                 (Vector (T (T VectorSize Real))))))
     (Element
        (Out
           (SampleRate Real
            -> T Real
            -> T Real
            -> T Real
            -> T Real
            -> Real
            -> (T Real, T (T Real), Real)
            -> T (Vector (T VectorSize Real))
                 (Vector (T (T VectorSize Real))))))
-> IO
     (SampleRate Real
      -> T Real
      -> T Real
      -> T Real
      -> T Real
      -> Real
      -> (T Real, T (T Real), Real)
      -> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real))))
forall a b. (a -> b) -> a -> b
$
       (InputArg (Control (T RealValue)) (Exp Real)
 -> InputArg (Control (T RealValue)) (Exp Real)
 -> InputArg (Control (T RealValue)) (Exp Real)
 -> InputArg (Control (T RealValue)) (Exp Real)
 -> Arg Number (Exp Real)
 -> InputArg (DetuneModulation Real) (Exp Real)
 -> SampleRate (Exp Real)
 -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
-> SampleRate (Exp Real)
-> Unwrapped
     (InputArg (Control (T RealValue)) (Exp Real)
      -> InputArg (Control (T RealValue)) (Exp Real)
      -> InputArg (Control (T RealValue)) (Exp Real)
      -> InputArg (Control (T RealValue)) (Exp Real)
      -> Arg Number (Exp Real)
      -> InputArg (DetuneModulation Real) (Exp Real)
      -> SampleRate (Exp Real)
      -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
forall a f. Wrapped a f => f -> SampleRate a -> Unwrapped f
wrapped ((InputArg (Control (T RealValue)) (Exp Real)
  -> InputArg (Control (T RealValue)) (Exp Real)
  -> InputArg (Control (T RealValue)) (Exp Real)
  -> InputArg (Control (T RealValue)) (Exp Real)
  -> Arg Number (Exp Real)
  -> InputArg (DetuneModulation Real) (Exp Real)
  -> SampleRate (Exp Real)
  -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
 -> SampleRate (Exp Real)
 -> Unwrapped
      (InputArg (Control (T RealValue)) (Exp Real)
       -> InputArg (Control (T RealValue)) (Exp Real)
       -> InputArg (Control (T RealValue)) (Exp Real)
       -> InputArg (Control (T RealValue)) (Exp Real)
       -> Arg Number (Exp Real)
       -> InputArg (DetuneModulation Real) (Exp Real)
       -> SampleRate (Exp Real)
       -> T (Serial VectorSize Real) (T (T (T VectorSize Real)))))
-> (InputArg (Control (T RealValue)) (Exp Real)
    -> InputArg (Control (T RealValue)) (Exp Real)
    -> InputArg (Control (T RealValue)) (Exp Real)
    -> InputArg (Control (T RealValue)) (Exp Real)
    -> Arg Number (Exp Real)
    -> InputArg (DetuneModulation Real) (Exp Real)
    -> SampleRate (Exp Real)
    -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
-> SampleRate (Exp Real)
-> Unwrapped
     (InputArg (Control (T RealValue)) (Exp Real)
      -> InputArg (Control (T RealValue)) (Exp Real)
      -> InputArg (Control (T RealValue)) (Exp Real)
      -> InputArg (Control (T RealValue)) (Exp Real)
      -> Arg Number (Exp Real)
      -> InputArg (DetuneModulation Real) (Exp Real)
      -> SampleRate (Exp Real)
      -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
forall a b. (a -> b) -> a -> b
$
       \(Control T (T RealValue)
depth1) (Control T (T RealValue)
depth2) (Control T (T RealValue)
depth3) (Control T (T RealValue)
depth4)
           (Number Exp Real
vel) (DetuneModulation (T (T RealValue), T (T (T RealValue)))
fm) ->
       (SampleRate (Exp Real) -> Exp Real -> Exp Real)
-> Exp Real
-> (Exp Real
    -> SampleRate (Exp Real)
    -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
-> SampleRate (Exp Real)
-> T (Serial VectorSize 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 (Serial VectorSize Real) (T (T (T VectorSize Real))))
 -> SampleRate (Exp Real)
 -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
-> (Exp Real
    -> SampleRate (Exp Real)
    -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
-> SampleRate (Exp Real)
-> T (Serial VectorSize Real) (T (T (T VectorSize Real)))
forall a b. (a -> b) -> a -> b
$ \Exp Real
speed SampleRate (Exp Real)
sr ->
           T (Serial VectorSize Real) -> T (T (T VectorSize Real))
forall a. T (T a) -> T (T a)
Stereo.multiValue (T (Serial VectorSize Real) -> T (T (T VectorSize Real)))
-> T (Serial VectorSize Real) (T (Serial VectorSize Real))
-> T (Serial VectorSize Real) (T (T (T VectorSize Real)))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$>
              (T (Serial VectorSize Real, T (Serial VectorSize Real))
  (T (Serial VectorSize Real))
forall a. PseudoRing a => T (a, T a) (T a)
Causal.envelopeStereo T (Serial VectorSize Real, T (Serial VectorSize Real))
  (T (Serial VectorSize Real))
-> SignalOf T (T (Serial VectorSize Real))
-> T (Serial VectorSize Real) (T (Serial VectorSize Real))
forall (process :: * -> * -> *) a b c.
C process =>
process (a, b) c -> SignalOf process b -> process a c
$>
                 (T (Serial VectorSize Real, Serial VectorSize Real)
  (Serial VectorSize Real)
-> T (T (Serial VectorSize Real, Serial VectorSize Real))
     (T (Serial 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.
 Serial VectorSize Real
 -> CodeGenFunction r (Serial VectorSize Real))
-> T (Serial VectorSize Real, Serial VectorSize Real)
     (Serial 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 Serial VectorSize Real
-> CodeGenFunction r (Serial VectorSize Real)
forall r.
Serial VectorSize Real
-> CodeGenFunction r (Serial VectorSize Real)
forall a r.
(PseudoRing a, IntegerConstant a, Fraction a) =>
a -> CodeGenFunction r a
WaveL.approxSine2)
                  T (T (Serial VectorSize Real, Serial VectorSize Real))
  (T (Serial VectorSize Real))
-> T (T (Serial VectorSize Real))
     (T (Serial VectorSize Real, Serial VectorSize Real))
-> T (T (Serial VectorSize Real)) (T (Serial VectorSize Real))
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
<<<
                  (T (Serial VectorSize Real), T (Serial VectorSize Real))
-> T (Serial VectorSize Real, Serial VectorSize Real)
forall a b. (T a, T b) -> T (a, b)
Stereo.interleave
                  ((T (Serial VectorSize Real), T (Serial VectorSize Real))
 -> T (Serial VectorSize Real, Serial VectorSize Real))
-> T (T (Serial VectorSize Real))
     (T (Serial VectorSize Real), T (Serial VectorSize Real))
-> T (T (Serial VectorSize Real))
     (T (Serial VectorSize Real, Serial VectorSize Real))
forall (a :: * -> * -> *) c d b.
Arrow a =>
(c -> d) -> a b c -> a b d
^<<
                  [T (T (Serial VectorSize Real)) (T (Serial VectorSize Real))]
-> T (T (Serial VectorSize Real)) (T (Serial VectorSize Real))
forall a. C a => [a] -> a
sumNested
                     [Exp Real
-> Exp Real
-> T (T RealValue)
-> SampleRate (Exp Real)
-> T (T (Serial VectorSize Real)) (T (Serial VectorSize Real))
fmModulator Exp Real
vel Exp Real
1 T (T RealValue)
depth1 SampleRate (Exp Real)
sr,
                      Exp Real
-> Exp Real
-> T (T RealValue)
-> SampleRate (Exp Real)
-> T (T (Serial VectorSize Real)) (T (Serial VectorSize Real))
fmModulator Exp Real
vel Exp Real
2 T (T RealValue)
depth2 SampleRate (Exp Real)
sr,
                      Exp Real
-> Exp Real
-> T (T RealValue)
-> SampleRate (Exp Real)
-> T (T (Serial VectorSize Real)) (T (Serial VectorSize Real))
fmModulator Exp Real
vel Exp Real
3 T (T RealValue)
depth3 SampleRate (Exp Real)
sr,
                      Exp Real
-> Exp Real
-> T (T RealValue)
-> SampleRate (Exp Real)
-> T (T (Serial VectorSize Real)) (T (Serial VectorSize Real))
fmModulator Exp Real
vel Exp Real
4 T (T RealValue)
depth4 SampleRate (Exp Real)
sr]
                    T (T (Serial VectorSize Real)) (T (Serial VectorSize Real))
-> T (T (Serial VectorSize Real)) (T (Serial VectorSize Real))
-> T (T (Serial VectorSize Real))
     (T (Serial VectorSize Real), T (Serial 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 (Serial VectorSize Real)) (T (Serial VectorSize Real))
forall a. T a a
forall {k} (cat :: k -> k -> *) (a :: k). Category cat => cat a a
id
                  T (T (Serial VectorSize Real)) (T (Serial VectorSize Real))
-> SignalOf T (T (Serial VectorSize Real))
-> SignalOf T (T (Serial VectorSize Real))
forall (process :: * -> * -> *) a b.
C process =>
process a b -> SignalOf process a -> SignalOf process b
$*
                  Exp Real
-> (T (T RealValue), T (T (T RealValue)))
-> T (T (Serial VectorSize Real))
stereoFrequenciesFromDetuneBendModulation Exp Real
speed (T (T RealValue), T (T (T RealValue)))
fm)))
      IO
  (Real
   -> Real
   -> ChunkSize
   -> SampleRate Real
   -> Real
   -> LazyTime
   -> Vector (T VectorSize Real))
pingReleaseEnvelope

tineBankFM ::
   IO (Real -> Real ->
       PC.T Real ->
       PC.T Real -> PC.T Real -> PC.T Real -> PC.T Real ->
       PC.T Real -> PC.T Real -> PC.T Real -> PC.T Real ->
       SigSt.ChunkSize ->
       PC.T (BM.T Real) ->
       Instrument Real (Stereo.T Vector))
tineBankFM :: IO
  (Real
   -> Real
   -> T Real
   -> T Real
   -> T Real
   -> T Real
   -> T Real
   -> T Real
   -> T Real
   -> T Real
   -> T Real
   -> ChunkSize
   -> T (T Real)
   -> Instrument Real (T (T VectorSize Real)))
tineBankFM =
   ((SampleRate Real
  -> T Real
  -> T Real
  -> T Real
  -> T Real
  -> T Real
  -> T Real
  -> T Real
  -> T Real
  -> Real
  -> (T Real, T (T Real), Real)
  -> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real))))
 -> (Real
     -> Real
     -> ChunkSize
     -> SampleRate Real
     -> Real
     -> LazyTime
     -> Vector (T VectorSize Real))
 -> Real
 -> Real
 -> T Real
 -> T Real
 -> T Real
 -> T Real
 -> T Real
 -> T Real
 -> T Real
 -> T Real
 -> T Real
 -> ChunkSize
 -> T (T Real)
 -> Instrument Real (T (T VectorSize Real)))
-> IO
     (SampleRate Real
      -> T Real
      -> T Real
      -> T Real
      -> T Real
      -> T Real
      -> T Real
      -> T Real
      -> T Real
      -> Real
      -> (T Real, T (T Real), Real)
      -> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real))))
-> IO
     (Real
      -> Real
      -> ChunkSize
      -> SampleRate Real
      -> Real
      -> LazyTime
      -> Vector (T VectorSize Real))
-> IO
     (Real
      -> Real
      -> T Real
      -> T Real
      -> T Real
      -> T Real
      -> T Real
      -> T Real
      -> T Real
      -> T Real
      -> T Real
      -> ChunkSize
      -> T (T Real)
      -> Instrument Real (T (T VectorSize Real)))
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 Real
-> T Real
-> T Real
-> T Real
-> T Real
-> T Real
-> T Real
-> T Real
-> Real
-> (T Real, T (T Real), Real)
-> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real)))
osc Real
-> Real
-> ChunkSize
-> SampleRate Real
-> Real
-> LazyTime
-> Vector (T VectorSize Real)
env
            Real
dec Real
rel T Real
detune
            T Real
depth1 T Real
depth2 T Real
depth3 T Real
depth4
            T Real
partial1 T Real
partial2 T Real
partial3 T Real
partial4
            ChunkSize
vcsize T (T Real)
fm SampleRate Real
sr Real
vel Real
freq LazyTime
dur ->
         T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real)))
-> Vector (T VectorSize Real) -> T (T (T VectorSize Real))
forall a b.
(Storable a, Storable b) =>
T (Vector a) (Vector b) -> Vector a -> Vector b
pioApply
            (SampleRate Real
-> T Real
-> T Real
-> T Real
-> T Real
-> T Real
-> T Real
-> T Real
-> T Real
-> Real
-> (T Real, T (T Real), Real)
-> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real)))
osc SampleRate Real
sr T Real
depth1 T Real
depth2 T Real
depth3 T Real
depth4
               T Real
partial1 T Real
partial2 T Real
partial3 T Real
partial4
               Real
vel (T Real
detune, T (T Real)
fm, Real
freq))
            (Real
-> Real
-> ChunkSize
-> SampleRate Real
-> Real
-> LazyTime
-> Vector (T VectorSize Real)
env Real
dec Real
rel ChunkSize
vcsize SampleRate Real
sr Real
0 LazyTime
dur))
      (DSL
  (SampleRate Real
   -> T Real
   -> T Real
   -> T Real
   -> T Real
   -> T Real
   -> T Real
   -> T Real
   -> T Real
   -> Real
   -> (T Real, T (T Real), Real)
   -> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real))))
  (Element
     (In
        (SampleRate Real
         -> T Real
         -> T Real
         -> T Real
         -> T Real
         -> T Real
         -> T Real
         -> T Real
         -> T Real
         -> Real
         -> (T Real, T (T Real), Real)
         -> T (Vector (T VectorSize Real))
              (Vector (T (T VectorSize Real))))))
  (Element
     (Out
        (SampleRate Real
         -> T Real
         -> T Real
         -> T Real
         -> T Real
         -> T Real
         -> T Real
         -> T Real
         -> T Real
         -> Real
         -> (T Real, T (T Real), Real)
         -> T (Vector (T VectorSize Real))
              (Vector (T (T VectorSize Real))))))
-> IO
     (SampleRate Real
      -> T Real
      -> T Real
      -> T Real
      -> T Real
      -> T Real
      -> T Real
      -> T Real
      -> T Real
      -> Real
      -> (T Real, T (T Real), Real)
      -> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real))))
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 Real
    -> T Real
    -> T Real
    -> T Real
    -> T Real
    -> T Real
    -> T Real
    -> T Real
    -> Real
    -> (T Real, T (T Real), Real)
    -> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real))))
   (Element
      (In
         (SampleRate Real
          -> T Real
          -> T Real
          -> T Real
          -> T Real
          -> T Real
          -> T Real
          -> T Real
          -> T Real
          -> Real
          -> (T Real, T (T Real), Real)
          -> T (Vector (T VectorSize Real))
               (Vector (T (T VectorSize Real))))))
   (Element
      (Out
         (SampleRate Real
          -> T Real
          -> T Real
          -> T Real
          -> T Real
          -> T Real
          -> T Real
          -> T Real
          -> T Real
          -> Real
          -> (T Real, T (T Real), Real)
          -> T (Vector (T VectorSize Real))
               (Vector (T (T VectorSize Real))))))
 -> IO
      (SampleRate Real
       -> T Real
       -> T Real
       -> T Real
       -> T Real
       -> T Real
       -> T Real
       -> T Real
       -> T Real
       -> Real
       -> (T Real, T (T Real), Real)
       -> T (Vector (T VectorSize Real))
            (Vector (T (T VectorSize Real)))))
-> DSL
     (SampleRate Real
      -> T Real
      -> T Real
      -> T Real
      -> T Real
      -> T Real
      -> T Real
      -> T Real
      -> T Real
      -> Real
      -> (T Real, T (T Real), Real)
      -> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real))))
     (Element
        (In
           (SampleRate Real
            -> T Real
            -> T Real
            -> T Real
            -> T Real
            -> T Real
            -> T Real
            -> T Real
            -> T Real
            -> Real
            -> (T Real, T (T Real), Real)
            -> T (Vector (T VectorSize Real))
                 (Vector (T (T VectorSize Real))))))
     (Element
        (Out
           (SampleRate Real
            -> T Real
            -> T Real
            -> T Real
            -> T Real
            -> T Real
            -> T Real
            -> T Real
            -> T Real
            -> Real
            -> (T Real, T (T Real), Real)
            -> T (Vector (T VectorSize Real))
                 (Vector (T (T VectorSize Real))))))
-> IO
     (SampleRate Real
      -> T Real
      -> T Real
      -> T Real
      -> T Real
      -> T Real
      -> T Real
      -> T Real
      -> T Real
      -> Real
      -> (T Real, T (T Real), Real)
      -> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real))))
forall a b. (a -> b) -> a -> b
$
       (InputArg (Control (T RealValue)) (Exp Real)
 -> InputArg (Control (T RealValue)) (Exp Real)
 -> InputArg (Control (T RealValue)) (Exp Real)
 -> InputArg (Control (T RealValue)) (Exp Real)
 -> InputArg (Control (T RealValue)) (Exp Real)
 -> InputArg (Control (T RealValue)) (Exp Real)
 -> InputArg (Control (T RealValue)) (Exp Real)
 -> InputArg (Control (T RealValue)) (Exp Real)
 -> Arg Number (Exp Real)
 -> InputArg (DetuneModulation Real) (Exp Real)
 -> SampleRate (Exp Real)
 -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
-> SampleRate (Exp Real)
-> Unwrapped
     (InputArg (Control (T RealValue)) (Exp Real)
      -> InputArg (Control (T RealValue)) (Exp Real)
      -> InputArg (Control (T RealValue)) (Exp Real)
      -> InputArg (Control (T RealValue)) (Exp Real)
      -> InputArg (Control (T RealValue)) (Exp Real)
      -> InputArg (Control (T RealValue)) (Exp Real)
      -> InputArg (Control (T RealValue)) (Exp Real)
      -> InputArg (Control (T RealValue)) (Exp Real)
      -> Arg Number (Exp Real)
      -> InputArg (DetuneModulation Real) (Exp Real)
      -> SampleRate (Exp Real)
      -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
forall a f. Wrapped a f => f -> SampleRate a -> Unwrapped f
wrapped ((InputArg (Control (T RealValue)) (Exp Real)
  -> InputArg (Control (T RealValue)) (Exp Real)
  -> InputArg (Control (T RealValue)) (Exp Real)
  -> InputArg (Control (T RealValue)) (Exp Real)
  -> InputArg (Control (T RealValue)) (Exp Real)
  -> InputArg (Control (T RealValue)) (Exp Real)
  -> InputArg (Control (T RealValue)) (Exp Real)
  -> InputArg (Control (T RealValue)) (Exp Real)
  -> Arg Number (Exp Real)
  -> InputArg (DetuneModulation Real) (Exp Real)
  -> SampleRate (Exp Real)
  -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
 -> SampleRate (Exp Real)
 -> Unwrapped
      (InputArg (Control (T RealValue)) (Exp Real)
       -> InputArg (Control (T RealValue)) (Exp Real)
       -> InputArg (Control (T RealValue)) (Exp Real)
       -> InputArg (Control (T RealValue)) (Exp Real)
       -> InputArg (Control (T RealValue)) (Exp Real)
       -> InputArg (Control (T RealValue)) (Exp Real)
       -> InputArg (Control (T RealValue)) (Exp Real)
       -> InputArg (Control (T RealValue)) (Exp Real)
       -> Arg Number (Exp Real)
       -> InputArg (DetuneModulation Real) (Exp Real)
       -> SampleRate (Exp Real)
       -> T (Serial VectorSize Real) (T (T (T VectorSize Real)))))
-> (InputArg (Control (T RealValue)) (Exp Real)
    -> InputArg (Control (T RealValue)) (Exp Real)
    -> InputArg (Control (T RealValue)) (Exp Real)
    -> InputArg (Control (T RealValue)) (Exp Real)
    -> InputArg (Control (T RealValue)) (Exp Real)
    -> InputArg (Control (T RealValue)) (Exp Real)
    -> InputArg (Control (T RealValue)) (Exp Real)
    -> InputArg (Control (T RealValue)) (Exp Real)
    -> Arg Number (Exp Real)
    -> InputArg (DetuneModulation Real) (Exp Real)
    -> SampleRate (Exp Real)
    -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
-> SampleRate (Exp Real)
-> Unwrapped
     (InputArg (Control (T RealValue)) (Exp Real)
      -> InputArg (Control (T RealValue)) (Exp Real)
      -> InputArg (Control (T RealValue)) (Exp Real)
      -> InputArg (Control (T RealValue)) (Exp Real)
      -> InputArg (Control (T RealValue)) (Exp Real)
      -> InputArg (Control (T RealValue)) (Exp Real)
      -> InputArg (Control (T RealValue)) (Exp Real)
      -> InputArg (Control (T RealValue)) (Exp Real)
      -> Arg Number (Exp Real)
      -> InputArg (DetuneModulation Real) (Exp Real)
      -> SampleRate (Exp Real)
      -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
forall a b. (a -> b) -> a -> b
$
         \(Control T (T RealValue)
depth1) (Control T (T RealValue)
depth2) (Control T (T RealValue)
depth3) (Control T (T RealValue)
depth4)
            (Control T (T RealValue)
partial1) (Control  T (T RealValue)
partial2)
               (Control T (T RealValue)
partial3) (Control T (T RealValue)
partial4)
            (Number Exp Real
vel) (DetuneModulation (T (T RealValue), T (T (T RealValue)))
fm) ->
       (SampleRate (Exp Real) -> Exp Real -> Exp Real)
-> Exp Real
-> (Exp Real
    -> SampleRate (Exp Real)
    -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
-> SampleRate (Exp Real)
-> T (Serial VectorSize 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 (Serial VectorSize Real) (T (T (T VectorSize Real))))
 -> SampleRate (Exp Real)
 -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
-> (Exp Real
    -> SampleRate (Exp Real)
    -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
-> SampleRate (Exp Real)
-> T (Serial VectorSize Real) (T (T (T VectorSize Real)))
forall a b. (a -> b) -> a -> b
$ \Exp Real
speed SampleRate (Exp Real)
sr ->

         (let partial ::
                 VectorValue -> Int -> VectorValue ->
                 LLVM.CodeGenFunction r VectorValue
              partial :: forall r.
Serial VectorSize Real
-> Int
-> Serial VectorSize Real
-> CodeGenFunction r (Serial VectorSize Real)
partial Serial VectorSize Real
amp Int
n Serial VectorSize Real
t =
                 Serial VectorSize Real
-> Serial VectorSize Real
-> CodeGenFunction r (Serial VectorSize Real)
forall a r. PseudoRing a => a -> a -> CodeGenFunction r a
forall r.
Serial VectorSize Real
-> Serial VectorSize Real
-> CodeGenFunction r (Serial VectorSize Real)
A.mul Serial VectorSize Real
amp (Serial VectorSize Real
 -> CodeGenFunction r (Serial VectorSize Real))
-> CodeGenFunction r (Serial VectorSize Real)
-> CodeGenFunction r (Serial VectorSize Real)
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<<
                 (Serial VectorSize Real
 -> CodeGenFunction r (Serial VectorSize Real))
-> Int
-> Serial VectorSize Real
-> CodeGenFunction r (Serial VectorSize Real)
forall v r.
(Fraction v, PseudoRing v, IntegerConstant v) =>
(v -> CodeGenFunction r v) -> Int -> v -> CodeGenFunction r v
WaveL.partial Serial VectorSize Real
-> CodeGenFunction r (Serial VectorSize Real)
forall a r.
(PseudoRing a, IntegerConstant a, Fraction a) =>
a -> CodeGenFunction r a
WaveL.approxSine2 Int
n Serial VectorSize Real
t
          in  T (Serial VectorSize Real) -> T (T (T VectorSize Real))
forall a. T (T a) -> T (T a)
Stereo.multiValue (T (Serial VectorSize Real) -> T (T (T VectorSize Real)))
-> T (Serial VectorSize Real, T (Serial VectorSize Real))
     (T (Serial VectorSize Real))
-> T (Serial VectorSize Real, T (Serial VectorSize Real))
     (T (T (T VectorSize Real)))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$>
              T (Serial VectorSize Real, T (Serial VectorSize Real))
  (T (Serial VectorSize Real))
forall a. PseudoRing a => T (a, T a) (T a)
Causal.envelopeStereo T (Serial VectorSize Real, T (Serial VectorSize Real))
  (T (T (T VectorSize Real)))
-> SignalOf T (T (Serial VectorSize Real))
-> T (Serial VectorSize Real) (T (T (T VectorSize Real)))
forall (process :: * -> * -> *) a b c.
C process =>
process (a, b) c -> SignalOf process b -> process a c
$>
                 (T (Serial VectorSize Real, Serial VectorSize Real)
  (Serial VectorSize Real)
-> T (T (Serial VectorSize Real, Serial VectorSize Real))
     (T (Serial 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.
 (Serial VectorSize Real,
  (Serial VectorSize Real,
   (Serial VectorSize Real, Serial VectorSize Real)))
 -> Serial VectorSize Real
 -> CodeGenFunction r (Serial VectorSize Real))
-> T ((Serial VectorSize Real,
       (Serial VectorSize Real,
        (Serial VectorSize Real, Serial VectorSize Real))),
      (Serial VectorSize Real, Serial VectorSize Real))
     (Serial 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
                         (\(Serial VectorSize Real
p1,(Serial VectorSize Real
p2,(Serial VectorSize Real
p3,Serial VectorSize Real
p4))) Serial VectorSize Real
t -> do
                             Serial VectorSize Real
y1 <- Serial VectorSize Real
-> Serial VectorSize Real
-> CodeGenFunction r (Serial VectorSize Real)
forall a r. PseudoRing a => a -> a -> CodeGenFunction r a
forall r.
Serial VectorSize Real
-> Serial VectorSize Real
-> CodeGenFunction r (Serial VectorSize Real)
A.mul Serial VectorSize Real
p1 (Serial VectorSize Real
 -> CodeGenFunction r (Serial VectorSize Real))
-> CodeGenFunction r (Serial VectorSize Real)
-> CodeGenFunction r (Serial VectorSize Real)
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< Serial VectorSize Real
-> CodeGenFunction r (Serial VectorSize Real)
forall a r.
(PseudoRing a, IntegerConstant a, Fraction a) =>
a -> CodeGenFunction r a
WaveL.approxSine2 Serial VectorSize Real
t
                             Serial VectorSize Real
y2 <- Serial VectorSize Real
-> Int
-> Serial VectorSize Real
-> CodeGenFunction r (Serial VectorSize Real)
forall r.
Serial VectorSize Real
-> Int
-> Serial VectorSize Real
-> CodeGenFunction r (Serial VectorSize Real)
partial Serial VectorSize Real
p2 Int
2 Serial VectorSize Real
t
                             Serial VectorSize Real
y3 <- Serial VectorSize Real
-> Int
-> Serial VectorSize Real
-> CodeGenFunction r (Serial VectorSize Real)
forall r.
Serial VectorSize Real
-> Int
-> Serial VectorSize Real
-> CodeGenFunction r (Serial VectorSize Real)
partial Serial VectorSize Real
p3 Int
3 Serial VectorSize Real
t
                             Serial VectorSize Real
y4 <- Serial VectorSize Real
-> Int
-> Serial VectorSize Real
-> CodeGenFunction r (Serial VectorSize Real)
forall r.
Serial VectorSize Real
-> Int
-> Serial VectorSize Real
-> CodeGenFunction r (Serial VectorSize Real)
partial Serial VectorSize Real
p4 Int
4 Serial VectorSize Real
t
                             Serial VectorSize Real
-> Serial VectorSize Real
-> CodeGenFunction r (Serial VectorSize Real)
forall a r. Additive a => a -> a -> CodeGenFunction r a
forall r.
Serial VectorSize Real
-> Serial VectorSize Real
-> CodeGenFunction r (Serial VectorSize Real)
A.add Serial VectorSize Real
y1 (Serial VectorSize Real
 -> CodeGenFunction r (Serial VectorSize Real))
-> CodeGenFunction r (Serial VectorSize Real)
-> CodeGenFunction r (Serial VectorSize Real)
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< Serial VectorSize Real
-> Serial VectorSize Real
-> CodeGenFunction r (Serial VectorSize Real)
forall a r. Additive a => a -> a -> CodeGenFunction r a
forall r.
Serial VectorSize Real
-> Serial VectorSize Real
-> CodeGenFunction r (Serial VectorSize Real)
A.add Serial VectorSize Real
y2 (Serial VectorSize Real
 -> CodeGenFunction r (Serial VectorSize Real))
-> CodeGenFunction r (Serial VectorSize Real)
-> CodeGenFunction r (Serial VectorSize Real)
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< Serial VectorSize Real
-> Serial VectorSize Real
-> CodeGenFunction r (Serial VectorSize Real)
forall a r. Additive a => a -> a -> CodeGenFunction r a
forall r.
Serial VectorSize Real
-> Serial VectorSize Real
-> CodeGenFunction r (Serial VectorSize Real)
A.add Serial VectorSize Real
y3 Serial VectorSize Real
y4)
                        T ((Serial VectorSize Real,
    (Serial VectorSize Real,
     (Serial VectorSize Real, Serial VectorSize Real))),
   (Serial VectorSize Real, Serial VectorSize Real))
  (Serial VectorSize Real)
-> SignalOf
     T
     (Serial VectorSize Real,
      (Serial VectorSize Real,
       (Serial VectorSize Real, Serial VectorSize Real)))
-> T (Serial VectorSize Real, Serial VectorSize Real)
     (Serial VectorSize Real)
forall (process :: * -> * -> *) a b c.
C process =>
process (a, b) c -> SignalOf process a -> process b c
$<
                           ((Serial VectorSize Real
 -> (Serial VectorSize Real,
     (Serial VectorSize Real, Serial VectorSize Real))
 -> (Serial VectorSize Real,
     (Serial VectorSize Real,
      (Serial VectorSize Real, Serial VectorSize Real))))
-> SignalOf T (Serial VectorSize Real)
-> SignalOf
     T
     (Serial VectorSize Real,
      (Serial VectorSize Real, Serial VectorSize Real))
-> SignalOf
     T
     (Serial VectorSize Real,
      (Serial VectorSize Real,
       (Serial VectorSize Real, Serial VectorSize Real)))
forall a b c.
(a -> b -> c) -> SignalOf T a -> SignalOf T b -> SignalOf T c
forall (f :: * -> *) a b c.
Applicative f =>
(a -> b -> c) -> f a -> f b -> f c
liftA2 (,) (T (T RealValue) -> T (Serial VectorSize Real)
piecewiseConstantVector T (T RealValue)
partial1) (SignalOf
   T
   (Serial VectorSize Real,
    (Serial VectorSize Real, Serial VectorSize Real))
 -> SignalOf
      T
      (Serial VectorSize Real,
       (Serial VectorSize Real,
        (Serial VectorSize Real, Serial VectorSize Real))))
-> SignalOf
     T
     (Serial VectorSize Real,
      (Serial VectorSize Real, Serial VectorSize Real))
-> SignalOf
     T
     (Serial VectorSize Real,
      (Serial VectorSize Real,
       (Serial VectorSize Real, Serial VectorSize Real)))
forall a b. (a -> b) -> a -> b
$
                            (Serial VectorSize Real
 -> (Serial VectorSize Real, Serial VectorSize Real)
 -> (Serial VectorSize Real,
     (Serial VectorSize Real, Serial VectorSize Real)))
-> SignalOf T (Serial VectorSize Real)
-> SignalOf T (Serial VectorSize Real, Serial VectorSize Real)
-> SignalOf
     T
     (Serial VectorSize Real,
      (Serial VectorSize Real, Serial VectorSize Real))
forall a b c.
(a -> b -> c) -> SignalOf T a -> SignalOf T b -> SignalOf T c
forall (f :: * -> *) a b c.
Applicative f =>
(a -> b -> c) -> f a -> f b -> f c
liftA2 (,) (T (T RealValue) -> T (Serial VectorSize Real)
piecewiseConstantVector T (T RealValue)
partial2) (SignalOf T (Serial VectorSize Real, Serial VectorSize Real)
 -> SignalOf
      T
      (Serial VectorSize Real,
       (Serial VectorSize Real, Serial VectorSize Real)))
-> SignalOf T (Serial VectorSize Real, Serial VectorSize Real)
-> SignalOf
     T
     (Serial VectorSize Real,
      (Serial VectorSize Real, Serial VectorSize Real))
forall a b. (a -> b) -> a -> b
$
                            (Serial VectorSize Real
 -> Serial VectorSize Real
 -> (Serial VectorSize Real, Serial VectorSize Real))
-> T (Serial VectorSize Real)
-> T (Serial VectorSize Real)
-> T (Serial VectorSize Real, Serial VectorSize Real)
forall a b c. (a -> b -> c) -> T a -> T b -> T c
forall (f :: * -> *) a b c.
Applicative f =>
(a -> b -> c) -> f a -> f b -> f c
liftA2 (,) (T (T RealValue) -> T (Serial VectorSize Real)
piecewiseConstantVector T (T RealValue)
partial3)
                                       (T (T RealValue) -> T (Serial VectorSize Real)
piecewiseConstantVector T (T RealValue)
partial4)))
                  T (T (Serial VectorSize Real, Serial VectorSize Real))
  (T (Serial VectorSize Real))
-> T (T (Serial VectorSize Real))
     (T (Serial VectorSize Real, Serial VectorSize Real))
-> T (T (Serial VectorSize Real)) (T (Serial VectorSize Real))
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
<<<
                  (T (Serial VectorSize Real), T (Serial VectorSize Real))
-> T (Serial VectorSize Real, Serial VectorSize Real)
forall a b. (T a, T b) -> T (a, b)
Stereo.interleave
                  ((T (Serial VectorSize Real), T (Serial VectorSize Real))
 -> T (Serial VectorSize Real, Serial VectorSize Real))
-> T (T (Serial VectorSize Real))
     (T (Serial VectorSize Real), T (Serial VectorSize Real))
-> T (T (Serial VectorSize Real))
     (T (Serial VectorSize Real, Serial VectorSize Real))
forall (a :: * -> * -> *) c d b.
Arrow a =>
(c -> d) -> a b c -> a b d
^<<
                  [T (T (Serial VectorSize Real)) (T (Serial VectorSize Real))]
-> T (T (Serial VectorSize Real)) (T (Serial VectorSize Real))
forall a. C a => [a] -> a
sumNested
                     [Exp Real
-> Exp Real
-> T (T RealValue)
-> SampleRate (Exp Real)
-> T (T (Serial VectorSize Real)) (T (Serial VectorSize Real))
fmModulator Exp Real
vel Exp Real
1 T (T RealValue)
depth1 SampleRate (Exp Real)
sr,
                      Exp Real
-> Exp Real
-> T (T RealValue)
-> SampleRate (Exp Real)
-> T (T (Serial VectorSize Real)) (T (Serial VectorSize Real))
fmModulator Exp Real
vel Exp Real
2 T (T RealValue)
depth2 SampleRate (Exp Real)
sr,
                      Exp Real
-> Exp Real
-> T (T RealValue)
-> SampleRate (Exp Real)
-> T (T (Serial VectorSize Real)) (T (Serial VectorSize Real))
fmModulator Exp Real
vel Exp Real
3 T (T RealValue)
depth3 SampleRate (Exp Real)
sr,
                      Exp Real
-> Exp Real
-> T (T RealValue)
-> SampleRate (Exp Real)
-> T (T (Serial VectorSize Real)) (T (Serial VectorSize Real))
fmModulator Exp Real
vel Exp Real
4 T (T RealValue)
depth4 SampleRate (Exp Real)
sr]
                    T (T (Serial VectorSize Real)) (T (Serial VectorSize Real))
-> T (T (Serial VectorSize Real)) (T (Serial VectorSize Real))
-> T (T (Serial VectorSize Real))
     (T (Serial VectorSize Real), T (Serial 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 (Serial VectorSize Real)) (T (Serial VectorSize Real))
forall a. T a a
forall {k} (cat :: k -> k -> *) (a :: k). Category cat => cat a a
id
                  T (T (Serial VectorSize Real)) (T (Serial VectorSize Real))
-> SignalOf T (T (Serial VectorSize Real))
-> SignalOf T (T (Serial VectorSize Real))
forall (process :: * -> * -> *) a b.
C process =>
process a b -> SignalOf process a -> SignalOf process b
$*
                  Exp Real
-> (T (T RealValue), T (T (T RealValue)))
-> T (T (Serial VectorSize Real))
stereoFrequenciesFromDetuneBendModulation Exp Real
speed (T (T RealValue), T (T (T RealValue)))
fm)))
      IO
  (Real
   -> Real
   -> ChunkSize
   -> SampleRate Real
   -> Real
   -> LazyTime
   -> Vector (T VectorSize Real))
pingReleaseEnvelope


{- |
FM synthesis where the modulator is a resonantly filtered sawtooth.
This way we get a sinus-like modulator where the sine frequency
(that is, something like the modulation index) can be controlled continously.
-}
resonantFMSynthProc ::
   Sig.T (Const.T RealValue) ->
   Sig.T (Const.T RealValue) ->
   Sig.T (Const.T RealValue) ->
   Exp Real ->
   SampleRate (Exp Real) ->
   Causal.T (Stereo.T VectorValue) (Stereo.T VectorValue)
resonantFMSynthProc :: T (T RealValue)
-> T (T RealValue)
-> T (T RealValue)
-> Exp Real
-> SampleRate (Exp Real)
-> T (T (Serial VectorSize Real)) (T (Serial VectorSize Real))
resonantFMSynthProc T (T RealValue)
reson T (T RealValue)
index T (T RealValue)
depth Exp Real
vel =
   (SampleRate (Exp Real) -> Exp Real -> Exp Real)
-> Exp Real
-> (Exp Real
    -> SampleRate (Exp Real)
    -> T (T (Serial VectorSize Real)) (T (Serial VectorSize Real)))
-> SampleRate (Exp Real)
-> T (T (Serial VectorSize Real)) (T (Serial 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 (Serial VectorSize Real)) (T (Serial VectorSize Real)))
 -> SampleRate (Exp Real)
 -> T (T (Serial VectorSize Real)) (T (Serial VectorSize Real)))
-> (Exp Real
    -> SampleRate (Exp Real)
    -> T (T (Serial VectorSize Real)) (T (Serial VectorSize Real)))
-> SampleRate (Exp Real)
-> T (T (Serial VectorSize Real)) (T (Serial VectorSize Real))
forall a b. (a -> b) -> a -> b
$ \Exp Real
halfLife SampleRate (Exp Real)
_sr ->
   T (Atom (Serial VectorSize Real))
-> (GuidedArguments
      (T (T (Serial VectorSize Real)))
      (T (Atom (Serial VectorSize Real)))
    -> T (T (Serial VectorSize Real)) (T (Serial VectorSize Real)))
-> T (T (Serial VectorSize Real)) (T (Serial VectorSize Real))
forall pat inp out.
(MakeGuidedArguments pat, PatternArguments pat ~ inp) =>
pat -> (GuidedArguments (T inp) pat -> T inp out) -> T inp out
F.withGuidedArgs (Atom (Serial VectorSize Real)
-> Atom (Serial VectorSize Real)
-> T (Atom (Serial VectorSize Real))
forall a. a -> a -> T a
Stereo.cons Atom (Serial VectorSize Real)
forall a. Atom a
F.atom Atom (Serial VectorSize Real)
forall a. Atom a
F.atom) ((GuidedArguments
    (T (T (Serial VectorSize Real)))
    (T (Atom (Serial VectorSize Real)))
  -> T (T (Serial VectorSize Real)) (T (Serial VectorSize Real)))
 -> T (T (Serial VectorSize Real)) (T (Serial VectorSize Real)))
-> (GuidedArguments
      (T (T (Serial VectorSize Real)))
      (T (Atom (Serial VectorSize Real)))
    -> T (T (Serial VectorSize Real)) (T (Serial VectorSize Real)))
-> T (T (Serial VectorSize Real)) (T (Serial VectorSize Real))
forall a b. (a -> b) -> a -> b
$ \GuidedArguments
  (T (T (Serial VectorSize Real)))
  (T (Atom (Serial VectorSize Real)))
stereoFreq ->
       let chan :: F.T inp VectorValue -> F.T inp VectorValue
           chan :: forall inp.
T inp (Serial VectorSize Real) -> T inp (Serial VectorSize Real)
chan T inp (Serial VectorSize Real)
freq =
              (forall r.
 Serial VectorSize Real
 -> CodeGenFunction r (Serial VectorSize Real))
-> T (Serial VectorSize Real, Serial VectorSize Real)
     (Serial 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 Serial VectorSize Real
-> CodeGenFunction r (Serial VectorSize Real)
forall r.
Serial VectorSize Real
-> CodeGenFunction r (Serial VectorSize Real)
forall a r.
(PseudoRing a, IntegerConstant a, Fraction a) =>
a -> CodeGenFunction r a
WaveL.approxSine2
              T (Serial VectorSize Real, Serial VectorSize Real)
  (Serial VectorSize Real)
-> T inp (Serial VectorSize Real, Serial VectorSize Real)
-> T inp (Serial VectorSize Real)
forall b c a. T b c -> T a b -> T a c
$&
              ((T (Serial VectorSize Real, Serial VectorSize Real)
  (Serial VectorSize Real)
forall a. PseudoRing a => T (a, a) a
Causal.envelope
                  T (Serial VectorSize Real, Serial VectorSize Real)
  (Serial VectorSize Real)
-> SignalOf T (Serial VectorSize Real)
-> T (Serial VectorSize Real) (Serial VectorSize Real)
forall (process :: * -> * -> *) a b c.
C process =>
process (a, b) c -> SignalOf process a -> process b c
$< (T (T RealValue) -> T (Serial VectorSize Real)
piecewiseConstantVector T (T RealValue)
depth
                      T (Serial VectorSize Real)
-> T (Serial VectorSize Real) -> T (Serial VectorSize Real)
forall a. C a => a -> a -> a
*
                      Exp Real -> Exp Real -> T (Serial 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
velExp Real -> Exp Real -> Exp Real
forall a. C a => a -> a -> a
+Exp Real
1)))
               T (Serial VectorSize Real) (Serial VectorSize Real)
-> T (Parameter (MultiValuesOf (Exp Real)), Serial VectorSize Real)
     (Serial VectorSize Real)
-> T (Parameter (MultiValuesOf (Exp Real)), Serial VectorSize Real)
     (Serial VectorSize Real)
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
<<<
               Result (Serial VectorSize Real) -> Serial VectorSize Real
forall a. Result a -> a
UniFilter.lowpass
               (Result (Serial VectorSize Real) -> Serial VectorSize Real)
-> T (Parameter (MultiValuesOf (Exp Real)), Serial VectorSize Real)
     (Result (Serial VectorSize Real))
-> T (Parameter (MultiValuesOf (Exp Real)), Serial VectorSize Real)
     (Serial VectorSize Real)
forall (a :: * -> * -> *) c d b.
Arrow a =>
(c -> d) -> a b c -> a b d
^<<
               T (Parameter (MultiValuesOf (Exp Real)), Serial VectorSize Real)
  (Result (Serial VectorSize Real))
forall parameter a b. C parameter a b => T (parameter, a) b
CtrlPS.process
               T (Parameter (MultiValuesOf (Exp Real)), Serial VectorSize Real)
  (Serial VectorSize Real)
-> T inp
     (Parameter (MultiValuesOf (Exp Real)), Serial VectorSize Real)
-> T inp (Serial VectorSize Real)
forall b c a. T b c -> T a b -> T a c
$&
               ((Exp Real -> Exp Real -> Parameter (Exp Real))
-> T (RealValue, RealValue) (Parameter (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 Exp Real -> Exp Real -> Parameter (Exp Real)
forall a. C a => a -> a -> Parameter a
UniFilterL.parameter
                   T (RealValue, RealValue) (Parameter (MultiValuesOf (Exp Real)))
-> T (Serial VectorSize Real) (RealValue, RealValue)
-> T (Serial VectorSize Real)
     (Parameter (MultiValuesOf (Exp Real)))
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
<<<
                   SignalOf T RealValue -> T RealValue (RealValue, RealValue)
forall (process :: * -> * -> *) a b.
C process =>
SignalOf process a -> process b (a, b)
CausalClass.feedFst (T (T RealValue) -> T RealValue
forall a. C a => T (T a) -> T a
piecewiseConstant T (T RealValue)
reson)
                   T RealValue (RealValue, RealValue)
-> T (Serial VectorSize Real) RealValue
-> T (Serial VectorSize Real) (RealValue, RealValue)
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
<<<
                   (T (RealValue, RealValue) RealValue
forall a. PseudoRing a => T (a, a) a
Causal.envelope T (RealValue, RealValue) RealValue
-> SignalOf T RealValue -> T RealValue RealValue
forall (process :: * -> * -> *) a b c.
C process =>
process (a, b) c -> SignalOf process a -> process b c
$< T (T RealValue) -> T RealValue
forall a. C a => T (T a) -> T a
piecewiseConstant T (T RealValue)
index)
                   T RealValue RealValue
-> T (Serial VectorSize Real) RealValue
-> T (Serial VectorSize Real) RealValue
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)
-> T (Serial VectorSize Real) RealValue
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 (Serial VectorSize Real) (Parameter (MultiValuesOf (Exp Real)))
-> T inp (Serial VectorSize Real)
-> T inp (Parameter (MultiValuesOf (Exp Real)))
forall b c a. T b c -> T a b -> T a c
$&
                   T inp (Serial VectorSize Real)
freq)
               T inp (Parameter (MultiValuesOf (Exp Real)))
-> T inp (Serial VectorSize Real)
-> T inp
     (Parameter (MultiValuesOf (Exp Real)), Serial VectorSize Real)
forall a b c. T a b -> T a c -> T a (b, c)
&|&
               (((forall r.
 Serial VectorSize Real
 -> CodeGenFunction r (Serial VectorSize Real))
-> T (Serial VectorSize Real, Serial VectorSize Real)
     (Serial 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 Serial VectorSize Real
-> CodeGenFunction r (Serial VectorSize Real)
forall r.
Serial VectorSize Real
-> CodeGenFunction r (Serial VectorSize Real)
forall a r.
(PseudoRing a, IntegerConstant a) =>
a -> CodeGenFunction r a
WaveL.saw T (Serial VectorSize Real, Serial VectorSize Real)
  (Serial VectorSize Real)
-> SignalOf T (Serial VectorSize Real)
-> T (Serial VectorSize Real) (Serial VectorSize Real)
forall (process :: * -> * -> *) a b c.
C process =>
process (a, b) c -> SignalOf process a -> process b c
$< SignalOf T (Serial VectorSize Real)
T (Serial VectorSize Real)
forall a. C a => a
zero)
                T (Serial VectorSize Real) (Serial VectorSize Real)
-> T inp (Serial VectorSize Real) -> T inp (Serial VectorSize Real)
forall b c a. T b c -> T a b -> T a c
$&
                T inp (Serial VectorSize Real)
freq))
              T inp (Serial VectorSize Real)
-> T inp (Serial VectorSize Real)
-> T inp (Serial VectorSize Real, Serial VectorSize Real)
forall a b c. T a b -> T a c -> T a (b, c)
&|&
              T inp (Serial VectorSize Real)
freq
       in  (T (T (Serial VectorSize Real)) (Serial VectorSize Real)
 -> T (T (Serial VectorSize Real)) (Serial VectorSize Real))
-> T (T (T (Serial VectorSize Real)) (Serial VectorSize Real))
-> T (T (Serial VectorSize Real)) (T (Serial 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 (T (Serial VectorSize Real)) (Serial VectorSize Real)
-> T (T (Serial VectorSize Real)) (Serial VectorSize Real)
forall inp.
T inp (Serial VectorSize Real) -> T inp (Serial VectorSize Real)
chan T (T (T (Serial VectorSize Real)) (Serial VectorSize Real))
GuidedArguments
  (T (T (Serial VectorSize Real)))
  (T (Atom (Serial VectorSize Real)))
stereoFreq

resonantFMSynth ::
   IO (Real -> Real ->
       PC.T Real ->
       PC.T Real -> PC.T Real -> PC.T Real ->
       SigSt.ChunkSize ->
       PC.T (BM.T Real) ->
       Instrument Real (Stereo.T Vector))
resonantFMSynth :: IO
  (Real
   -> Real
   -> T Real
   -> T Real
   -> T Real
   -> T Real
   -> ChunkSize
   -> T (T Real)
   -> Instrument Real (T (T VectorSize Real)))
resonantFMSynth =
   ((SampleRate Real
  -> (T Real, T Real, T Real)
  -> Real
  -> (T Real, T (T Real), Real)
  -> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real))))
 -> (Real
     -> Real
     -> ChunkSize
     -> SampleRate Real
     -> Real
     -> LazyTime
     -> Vector (T VectorSize Real))
 -> Real
 -> Real
 -> T Real
 -> T Real
 -> T Real
 -> T Real
 -> ChunkSize
 -> T (T Real)
 -> Instrument Real (T (T VectorSize Real)))
-> IO
     (SampleRate Real
      -> (T Real, T Real, T Real)
      -> Real
      -> (T Real, T (T Real), Real)
      -> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real))))
-> IO
     (Real
      -> Real
      -> ChunkSize
      -> SampleRate Real
      -> Real
      -> LazyTime
      -> Vector (T VectorSize Real))
-> IO
     (Real
      -> Real
      -> T Real
      -> T Real
      -> T Real
      -> T Real
      -> ChunkSize
      -> T (T Real)
      -> Instrument Real (T (T VectorSize Real)))
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 Real, T Real, T Real)
-> Real
-> (T Real, T (T Real), Real)
-> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real)))
osc Real
-> Real
-> ChunkSize
-> SampleRate Real
-> Real
-> LazyTime
-> Vector (T VectorSize Real)
env Real
dec Real
rel T Real
detune T Real
reson T Real
index T Real
depth ChunkSize
vcsize T (T Real)
fm SampleRate Real
sr Real
vel Real
freq LazyTime
dur ->
         T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real)))
-> Vector (T VectorSize Real) -> T (T (T VectorSize Real))
forall a b.
(Storable a, Storable b) =>
T (Vector a) (Vector b) -> Vector a -> Vector b
pioApply
            (SampleRate Real
-> (T Real, T Real, T Real)
-> Real
-> (T Real, T (T Real), Real)
-> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real)))
osc SampleRate Real
sr (T Real
reson, T Real
index, T Real
depth) Real
vel (T Real
detune, T (T Real)
fm, Real
freq))
            (Real
-> Real
-> ChunkSize
-> SampleRate Real
-> Real
-> LazyTime
-> Vector (T VectorSize Real)
env Real
dec Real
rel ChunkSize
vcsize SampleRate Real
sr Real
0 LazyTime
dur))
      (DSL
  (SampleRate Real
   -> (T Real, T Real, T Real)
   -> Real
   -> (T Real, T (T Real), Real)
   -> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real))))
  (Element
     (In
        (SampleRate Real
         -> (T Real, T Real, T Real)
         -> Real
         -> (T Real, T (T Real), Real)
         -> T (Vector (T VectorSize Real))
              (Vector (T (T VectorSize Real))))))
  (Element
     (Out
        (SampleRate Real
         -> (T Real, T Real, T Real)
         -> Real
         -> (T Real, T (T Real), Real)
         -> T (Vector (T VectorSize Real))
              (Vector (T (T VectorSize Real))))))
-> IO
     (SampleRate Real
      -> (T Real, T Real, T Real)
      -> Real
      -> (T Real, T (T Real), Real)
      -> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real))))
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 Real, T Real, T Real)
    -> Real
    -> (T Real, T (T Real), Real)
    -> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real))))
   (Element
      (In
         (SampleRate Real
          -> (T Real, T Real, T Real)
          -> Real
          -> (T Real, T (T Real), Real)
          -> T (Vector (T VectorSize Real))
               (Vector (T (T VectorSize Real))))))
   (Element
      (Out
         (SampleRate Real
          -> (T Real, T Real, T Real)
          -> Real
          -> (T Real, T (T Real), Real)
          -> T (Vector (T VectorSize Real))
               (Vector (T (T VectorSize Real))))))
 -> IO
      (SampleRate Real
       -> (T Real, T Real, T Real)
       -> Real
       -> (T Real, T (T Real), Real)
       -> T (Vector (T VectorSize Real))
            (Vector (T (T VectorSize Real)))))
-> DSL
     (SampleRate Real
      -> (T Real, T Real, T Real)
      -> Real
      -> (T Real, T (T Real), Real)
      -> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real))))
     (Element
        (In
           (SampleRate Real
            -> (T Real, T Real, T Real)
            -> Real
            -> (T Real, T (T Real), Real)
            -> T (Vector (T VectorSize Real))
                 (Vector (T (T VectorSize Real))))))
     (Element
        (Out
           (SampleRate Real
            -> (T Real, T Real, T Real)
            -> Real
            -> (T Real, T (T Real), Real)
            -> T (Vector (T VectorSize Real))
                 (Vector (T (T VectorSize Real))))))
-> IO
     (SampleRate Real
      -> (T Real, T Real, T Real)
      -> Real
      -> (T Real, T (T Real), Real)
      -> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real))))
forall a b. (a -> b) -> a -> b
$
       ((InputArg (Control (T RealValue)) (Exp Real),
  InputArg (Control (T RealValue)) (Exp Real),
  InputArg (Control (T RealValue)) (Exp Real))
 -> Arg Number (Exp Real)
 -> InputArg (DetuneModulation Real) (Exp Real)
 -> SampleRate (Exp Real)
 -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
-> SampleRate (Exp Real)
-> Unwrapped
     ((InputArg (Control (T RealValue)) (Exp Real),
       InputArg (Control (T RealValue)) (Exp Real),
       InputArg (Control (T RealValue)) (Exp Real))
      -> Arg Number (Exp Real)
      -> InputArg (DetuneModulation Real) (Exp Real)
      -> SampleRate (Exp Real)
      -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
forall a f. Wrapped a f => f -> SampleRate a -> Unwrapped f
wrapped (((InputArg (Control (T RealValue)) (Exp Real),
   InputArg (Control (T RealValue)) (Exp Real),
   InputArg (Control (T RealValue)) (Exp Real))
  -> Arg Number (Exp Real)
  -> InputArg (DetuneModulation Real) (Exp Real)
  -> SampleRate (Exp Real)
  -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
 -> SampleRate (Exp Real)
 -> Unwrapped
      ((InputArg (Control (T RealValue)) (Exp Real),
        InputArg (Control (T RealValue)) (Exp Real),
        InputArg (Control (T RealValue)) (Exp Real))
       -> Arg Number (Exp Real)
       -> InputArg (DetuneModulation Real) (Exp Real)
       -> SampleRate (Exp Real)
       -> T (Serial VectorSize Real) (T (T (T VectorSize Real)))))
-> ((InputArg (Control (T RealValue)) (Exp Real),
     InputArg (Control (T RealValue)) (Exp Real),
     InputArg (Control (T RealValue)) (Exp Real))
    -> Arg Number (Exp Real)
    -> InputArg (DetuneModulation Real) (Exp Real)
    -> SampleRate (Exp Real)
    -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
-> SampleRate (Exp Real)
-> Unwrapped
     ((InputArg (Control (T RealValue)) (Exp Real),
       InputArg (Control (T RealValue)) (Exp Real),
       InputArg (Control (T RealValue)) (Exp Real))
      -> Arg Number (Exp Real)
      -> InputArg (DetuneModulation Real) (Exp Real)
      -> SampleRate (Exp Real)
      -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
forall a b. (a -> b) -> a -> b
$
       \(Control T (T RealValue)
reson, Control T (T RealValue)
index, Control T (T RealValue)
depth)
         (Number Exp Real
vel) (DetuneModulation (T (T RealValue), T (T (T RealValue)))
fm) ->
       (SampleRate (Exp Real) -> Exp Real -> Exp Real)
-> Exp Real
-> (Exp Real
    -> SampleRate (Exp Real)
    -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
-> SampleRate (Exp Real)
-> T (Serial VectorSize 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 (Serial VectorSize Real) (T (T (T VectorSize Real))))
 -> SampleRate (Exp Real)
 -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
-> (Exp Real
    -> SampleRate (Exp Real)
    -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
-> SampleRate (Exp Real)
-> T (Serial VectorSize Real) (T (T (T VectorSize Real)))
forall a b. (a -> b) -> a -> b
$ \Exp Real
speed SampleRate (Exp Real)
sr ->
            T (Serial VectorSize Real) -> T (T (T VectorSize Real))
forall a. T (T a) -> T (T a)
Stereo.multiValue (T (Serial VectorSize Real) -> T (T (T VectorSize Real)))
-> T (Serial VectorSize Real, T (Serial VectorSize Real))
     (T (Serial VectorSize Real))
-> T (Serial VectorSize Real, T (Serial VectorSize Real))
     (T (T (T VectorSize Real)))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$>
            T (Serial VectorSize Real, T (Serial VectorSize Real))
  (T (Serial VectorSize Real))
forall a. PseudoRing a => T (a, T a) (T a)
Causal.envelopeStereo T (Serial VectorSize Real, T (Serial VectorSize Real))
  (T (T (T VectorSize Real)))
-> SignalOf T (T (Serial VectorSize Real))
-> T (Serial VectorSize Real) (T (T (T VectorSize Real)))
forall (process :: * -> * -> *) a b c.
C process =>
process (a, b) c -> SignalOf process b -> process a c
$>
               (T (T RealValue)
-> T (T RealValue)
-> T (T RealValue)
-> Exp Real
-> SampleRate (Exp Real)
-> T (T (Serial VectorSize Real)) (T (Serial VectorSize Real))
resonantFMSynthProc T (T RealValue)
reson T (T RealValue)
index T (T RealValue)
depth Exp Real
vel SampleRate (Exp Real)
sr T (T (Serial VectorSize Real)) (T (Serial VectorSize Real))
-> SignalOf T (T (Serial VectorSize Real))
-> SignalOf T (T (Serial VectorSize Real))
forall (process :: * -> * -> *) a b.
C process =>
process a b -> SignalOf process a -> SignalOf process b
$*
                Exp Real
-> (T (T RealValue), T (T (T RealValue)))
-> T (T (Serial VectorSize Real))
stereoFrequenciesFromDetuneBendModulation Exp Real
speed (T (T RealValue), T (T (T RealValue)))
fm))
      IO
  (Real
   -> Real
   -> ChunkSize
   -> SampleRate Real
   -> Real
   -> LazyTime
   -> Vector (T VectorSize Real))
pingReleaseEnvelope


phaserOsci ::
   (Exp Real -> Causal.T a VectorValue) ->
   Causal.T a (Stereo.T VectorValue)
phaserOsci :: forall a.
(Exp Real -> T a (Serial VectorSize Real))
-> T a (T (Serial VectorSize Real))
phaserOsci Exp Real -> T a (Serial VectorSize Real)
osci =
   Exp Real
-> T (T (Serial VectorSize Real)) (T (Serial 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 (Serial VectorSize Real)) (T (Serial VectorSize Real))
-> T a (T (Serial VectorSize Real))
-> T a (T (Serial VectorSize Real))
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
<<<
   (Serial VectorSize Real
 -> Serial VectorSize Real -> T (Serial VectorSize Real))
-> T a (Serial VectorSize Real)
-> T a (Serial VectorSize Real)
-> T a (T (Serial VectorSize Real))
forall a b c. (a -> b -> c) -> T a a -> T a b -> T a c
forall (f :: * -> *) a b c.
Applicative f =>
(a -> b -> c) -> f a -> f b -> f c
liftA2 Serial VectorSize Real
-> Serial VectorSize Real -> T (Serial VectorSize Real)
forall a. a -> a -> T a
Stereo.cons
      ([T a (Serial VectorSize Real)] -> T a (Serial VectorSize Real)
forall a. C a => [a] -> a
sumNested ([T a (Serial VectorSize Real)] -> T a (Serial VectorSize Real))
-> [T a (Serial VectorSize Real)] -> T a (Serial VectorSize Real)
forall a b. (a -> b) -> a -> b
$ (Exp Real -> T a (Serial VectorSize Real))
-> [Exp Real] -> [T a (Serial VectorSize Real)]
forall a b. (a -> b) -> [a] -> [b]
map Exp Real -> T a (Serial VectorSize Real)
osci [Exp Real
1.0, -Exp Real
0.4, Exp Real
0.5, -Exp Real
0.7])
      ([T a (Serial VectorSize Real)] -> T a (Serial VectorSize Real)
forall a. C a => [a] -> a
sumNested ([T a (Serial VectorSize Real)] -> T a (Serial VectorSize Real))
-> [T a (Serial VectorSize Real)] -> T a (Serial VectorSize Real)
forall a b. (a -> b) -> a -> b
$ (Exp Real -> T a (Serial VectorSize Real))
-> [Exp Real] -> [T a (Serial VectorSize Real)]
forall a b. (a -> b) -> [a] -> [b]
map Exp Real -> T a (Serial VectorSize Real)
osci [Exp Real
0.4, -Exp Real
1.0, Exp Real
0.7, -Exp Real
0.5])


softStringDetuneFM ::
   IO (Real ->
       PC.T Real ->
       PC.T (BM.T Real) ->
       Instrument Real (Stereo.T Vector))
softStringDetuneFM :: IO
  (Real
   -> T Real -> T (T Real) -> Instrument Real (T (T VectorSize Real)))
softStringDetuneFM =
   ((SampleRate Real
  -> T Real
  -> (T (T Real), Real)
  -> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real))))
 -> (Real
     -> SampleRate Real
     -> Real
     -> LazyTime
     -> Vector (T VectorSize Real))
 -> Real
 -> T Real
 -> T (T Real)
 -> Instrument Real (T (T VectorSize Real)))
-> IO
     (SampleRate Real
      -> T Real
      -> (T (T Real), Real)
      -> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real))))
-> IO
     (Real
      -> SampleRate Real
      -> Real
      -> LazyTime
      -> Vector (T VectorSize Real))
-> IO
     (Real
      -> T Real -> T (T Real) -> Instrument Real (T (T VectorSize Real)))
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 Real
-> (T (T Real), Real)
-> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real)))
osc Real
-> SampleRate Real
-> Real
-> LazyTime
-> Vector (T VectorSize Real)
env Real
att T Real
det T (T Real)
fm SampleRate Real
sr Real
vel Real
freq LazyTime
dur ->
         T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real)))
-> Vector (T VectorSize Real) -> T (T (T VectorSize Real))
forall a b.
(Storable a, Storable b) =>
T (Vector a) (Vector b) -> Vector a -> Vector b
pioApply (SampleRate Real
-> T Real
-> (T (T Real), Real)
-> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real)))
osc SampleRate Real
sr T Real
det (T (T Real)
fm, Real
freq)) (Real
-> SampleRate Real
-> Real
-> LazyTime
-> Vector (T VectorSize Real)
env Real
att SampleRate Real
sr Real
vel LazyTime
dur))
      (let osci :: Exp Real -> Causal.T (VectorValue, VectorValue) VectorValue
           osci :: Exp Real
-> T (Serial VectorSize Real, Serial VectorSize Real)
     (Serial VectorSize Real)
osci Exp Real
d =
              ((forall r.
 Serial VectorSize Real
 -> CodeGenFunction r (Serial VectorSize Real))
-> T (Serial VectorSize Real, Serial VectorSize Real)
     (Serial 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 Serial VectorSize Real
-> CodeGenFunction r (Serial VectorSize Real)
forall r.
Serial VectorSize Real
-> CodeGenFunction r (Serial VectorSize Real)
forall a r.
(PseudoRing a, IntegerConstant a) =>
a -> CodeGenFunction r a
WaveL.saw T (Serial VectorSize Real, Serial VectorSize Real)
  (Serial VectorSize Real)
-> SignalOf T (Serial VectorSize Real)
-> T (Serial VectorSize Real) (Serial VectorSize Real)
forall (process :: * -> * -> *) a b c.
C process =>
process (a, b) c -> SignalOf process a -> process b c
$< SignalOf T (Serial VectorSize Real)
T (Serial VectorSize Real)
forall a. C a => a
zero)
              T (Serial VectorSize Real) (Serial VectorSize Real)
-> T (Serial VectorSize Real, Serial VectorSize Real)
     (Serial VectorSize Real)
-> T (Serial VectorSize Real, Serial VectorSize Real)
     (Serial VectorSize Real)
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
<<<
              T (Serial VectorSize Real, Serial VectorSize Real)
  (Serial VectorSize Real)
forall a. PseudoRing a => T (a, a) a
Causal.envelope
              T (Serial VectorSize Real, Serial VectorSize Real)
  (Serial VectorSize Real)
-> T (Serial VectorSize Real, Serial VectorSize Real)
     (Serial VectorSize Real, Serial VectorSize Real)
-> T (Serial VectorSize Real, Serial VectorSize Real)
     (Serial VectorSize Real)
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
<<<
              T (Serial VectorSize Real) (Serial VectorSize Real)
-> T (Serial VectorSize Real, Serial VectorSize Real)
     (Serial VectorSize Real, Serial 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 (Serial VectorSize Real) (Serial VectorSize Real)
forall a. C a => a
one T (Serial VectorSize Real) (Serial VectorSize Real)
-> T (Serial VectorSize Real) (Serial VectorSize Real)
-> T (Serial VectorSize Real) (Serial VectorSize Real)
forall a. C a => a -> a -> a
+ Exp Real -> T (Serial VectorSize Real) (Serial VectorSize Real)
forall n a.
(Positive n, PseudoRing a) =>
Exp a -> T (Serial n a) (Serial n a)
CausalPS.amplify Exp Real
d)
       in  DSL
  (SampleRate Real
   -> T Real
   -> (T (T Real), Real)
   -> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real))))
  (Element
     (In
        (SampleRate Real
         -> T Real
         -> (T (T Real), Real)
         -> T (Vector (T VectorSize Real))
              (Vector (T (T VectorSize Real))))))
  (Element
     (Out
        (SampleRate Real
         -> T Real
         -> (T (T Real), Real)
         -> T (Vector (T VectorSize Real))
              (Vector (T (T VectorSize Real))))))
-> IO
     (SampleRate Real
      -> T Real
      -> (T (T Real), Real)
      -> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real))))
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 Real
    -> (T (T Real), Real)
    -> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real))))
   (Element
      (In
         (SampleRate Real
          -> T Real
          -> (T (T Real), Real)
          -> T (Vector (T VectorSize Real))
               (Vector (T (T VectorSize Real))))))
   (Element
      (Out
         (SampleRate Real
          -> T Real
          -> (T (T Real), Real)
          -> T (Vector (T VectorSize Real))
               (Vector (T (T VectorSize Real))))))
 -> IO
      (SampleRate Real
       -> T Real
       -> (T (T Real), Real)
       -> T (Vector (T VectorSize Real))
            (Vector (T (T VectorSize Real)))))
-> DSL
     (SampleRate Real
      -> T Real
      -> (T (T Real), Real)
      -> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real))))
     (Element
        (In
           (SampleRate Real
            -> T Real
            -> (T (T Real), Real)
            -> T (Vector (T VectorSize Real))
                 (Vector (T (T VectorSize Real))))))
     (Element
        (Out
           (SampleRate Real
            -> T Real
            -> (T (T Real), Real)
            -> T (Vector (T VectorSize Real))
                 (Vector (T (T VectorSize Real))))))
-> IO
     (SampleRate Real
      -> T Real
      -> (T (T Real), Real)
      -> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real))))
forall a b. (a -> b) -> a -> b
$
           (InputArg (Control (T RealValue)) (Exp Real)
 -> InputArg (Modulation Real) (Exp Real)
 -> SampleRate (Exp Real)
 -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
-> SampleRate (Exp Real)
-> Unwrapped
     (InputArg (Control (T RealValue)) (Exp Real)
      -> InputArg (Modulation Real) (Exp Real)
      -> SampleRate (Exp Real)
      -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
forall a f. Wrapped a f => f -> SampleRate a -> Unwrapped f
wrapped ((InputArg (Control (T RealValue)) (Exp Real)
  -> InputArg (Modulation Real) (Exp Real)
  -> SampleRate (Exp Real)
  -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
 -> SampleRate (Exp Real)
 -> Unwrapped
      (InputArg (Control (T RealValue)) (Exp Real)
       -> InputArg (Modulation Real) (Exp Real)
       -> SampleRate (Exp Real)
       -> T (Serial VectorSize Real) (T (T (T VectorSize Real)))))
-> (InputArg (Control (T RealValue)) (Exp Real)
    -> InputArg (Modulation Real) (Exp Real)
    -> SampleRate (Exp Real)
    -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
-> SampleRate (Exp Real)
-> Unwrapped
     (InputArg (Control (T RealValue)) (Exp Real)
      -> InputArg (Modulation Real) (Exp Real)
      -> SampleRate (Exp Real)
      -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
forall a b. (a -> b) -> a -> b
$ \(Control T (T RealValue)
det) (Modulation T (T (T RealValue))
fm) ->
           (SampleRate (Exp Real) -> Exp Real -> Exp Real)
-> Exp Real
-> (Exp Real
    -> SampleRate (Exp Real)
    -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
-> SampleRate (Exp Real)
-> T (Serial VectorSize 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 (Serial VectorSize Real) (T (T (T VectorSize Real))))
 -> SampleRate (Exp Real)
 -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
-> (Exp Real
    -> SampleRate (Exp Real)
    -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
-> SampleRate (Exp Real)
-> T (Serial VectorSize Real) (T (T (T VectorSize Real)))
forall a b. (a -> b) -> a -> b
$ \Exp Real
speed SampleRate (Exp Real)
_sr ->
           T (Serial VectorSize Real) -> T (T (T VectorSize Real))
forall a. T (T a) -> T (T a)
Stereo.multiValue (T (Serial VectorSize Real) -> T (T (T VectorSize Real)))
-> T (Serial VectorSize Real) (T (Serial VectorSize Real))
-> T (Serial VectorSize Real) (T (T (T VectorSize Real)))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$>
           (T (Serial VectorSize Real, T (Serial VectorSize Real))
  (T (Serial VectorSize Real))
forall a. PseudoRing a => T (a, T a) (T a)
Causal.envelopeStereo T (Serial VectorSize Real, T (Serial VectorSize Real))
  (T (Serial VectorSize Real))
-> SignalOf T (T (Serial VectorSize Real))
-> T (Serial VectorSize Real) (T (Serial VectorSize Real))
forall (process :: * -> * -> *) a b c.
C process =>
process (a, b) c -> SignalOf process b -> process a c
$>
              ((Exp Real
 -> T (Serial VectorSize Real, Serial VectorSize Real)
      (Serial VectorSize Real))
-> T (Serial VectorSize Real, Serial VectorSize Real)
     (T (Serial VectorSize Real))
forall a.
(Exp Real -> T a (Serial VectorSize Real))
-> T a (T (Serial VectorSize Real))
phaserOsci Exp Real
-> T (Serial VectorSize Real, Serial VectorSize Real)
     (Serial VectorSize Real)
osci
               T (Serial VectorSize Real, Serial VectorSize Real)
  (T (Serial VectorSize Real))
-> SignalOf T (Serial VectorSize Real)
-> T (Serial VectorSize Real) (T (Serial VectorSize Real))
forall (process :: * -> * -> *) a b c.
C process =>
process (a, b) c -> SignalOf process a -> process b c
$< T (T RealValue) -> T (Serial VectorSize Real)
piecewiseConstantVector T (T RealValue)
det
               T (Serial VectorSize Real) (T (Serial VectorSize Real))
-> SignalOf T (Serial VectorSize Real)
-> SignalOf T (T (Serial VectorSize Real))
forall (process :: * -> * -> *) a b.
C process =>
process a b -> SignalOf process a -> SignalOf process b
$* Exp Real -> T (T (T RealValue)) -> T (Serial VectorSize Real)
frequencyFromBendModulation Exp Real
speed T (T (T RealValue))
fm)))
      IO
  (Real
   -> SampleRate Real
   -> Real
   -> LazyTime
   -> Vector (T VectorSize Real))
softStringReleaseEnvelope

{-
We might decouple the frequency of the enveloped tone
from the frequency of the envelope,
in order to get something like formants.
-}
softStringShapeFM, cosineStringStereoFM,
  arcSineStringStereoFM, arcTriangleStringStereoFM,
  arcSquareStringStereoFM, arcSawStringStereoFM ::
   IO (Real ->
       PC.T Real ->
       PC.T Real ->
       PC.T (BM.T Real) ->
       Instrument Real (Stereo.T Vector))
softStringShapeFM :: IO
  (Real
   -> T Real
   -> T Real
   -> T (T Real)
   -> Instrument Real (T (T VectorSize Real)))
softStringShapeFM =
   (forall r.
 Serial VectorSize Real
 -> Serial VectorSize Real
 -> CodeGenFunction r (Serial VectorSize Real))
-> IO
     (Real
      -> T Real
      -> T Real
      -> T (T Real)
      -> Instrument Real (T (T VectorSize Real)))
softStringShapeCore Serial VectorSize Real
-> Serial VectorSize Real
-> CodeGenFunction r (Serial VectorSize Real)
forall r.
Serial VectorSize Real
-> Serial VectorSize Real
-> CodeGenFunction r (Serial VectorSize Real)
forall a r.
(Field a, RationalConstant a, Real a) =>
a -> a -> CodeGenFunction r a
WaveL.rationalApproxSine1
cosineStringStereoFM :: IO
  (Real
   -> T Real
   -> T Real
   -> T (T Real)
   -> Instrument Real (T (T VectorSize Real)))
cosineStringStereoFM =
   (forall r.
 Serial VectorSize Real
 -> Serial VectorSize Real
 -> CodeGenFunction r (Serial VectorSize Real))
-> IO
     (Real
      -> T Real
      -> T Real
      -> T (T Real)
      -> Instrument Real (T (T VectorSize Real)))
softStringShapeCore
      (\Serial VectorSize Real
k Serial VectorSize Real
p -> Serial VectorSize Real
-> CodeGenFunction r (Serial VectorSize Real)
forall a r.
(PseudoRing a, IntegerConstant a, Fraction a) =>
a -> CodeGenFunction r a
WaveL.approxSine2 (Serial VectorSize Real
 -> CodeGenFunction r (Serial VectorSize Real))
-> CodeGenFunction r (Serial VectorSize Real)
-> CodeGenFunction r (Serial VectorSize Real)
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< Serial VectorSize Real
-> Serial VectorSize Real
-> CodeGenFunction r (Serial VectorSize Real)
forall a r.
(PseudoRing a, RationalConstant a, Fraction a) =>
a -> a -> CodeGenFunction r a
WaveL.replicate Serial VectorSize Real
k Serial VectorSize Real
p)
arcSawStringStereoFM :: IO
  (Real
   -> T Real
   -> T Real
   -> T (T Real)
   -> Instrument Real (T (T VectorSize Real)))
arcSawStringStereoFM = (forall r.
 Serial VectorSize Real
 -> CodeGenFunction r (Serial VectorSize Real))
-> IO
     (Real
      -> T Real
      -> T Real
      -> T (T Real)
      -> Instrument Real (T (T VectorSize Real)))
arcStringStereoFM Serial VectorSize Real
-> CodeGenFunction r (Serial VectorSize Real)
forall r.
Serial VectorSize Real
-> CodeGenFunction r (Serial VectorSize Real)
forall a r.
(PseudoRing a, IntegerConstant a) =>
a -> CodeGenFunction r a
WaveL.saw
arcSineStringStereoFM :: IO
  (Real
   -> T Real
   -> T Real
   -> T (T Real)
   -> Instrument Real (T (T VectorSize Real)))
arcSineStringStereoFM = (forall r.
 Serial VectorSize Real
 -> CodeGenFunction r (Serial VectorSize Real))
-> IO
     (Real
      -> T Real
      -> T Real
      -> T (T Real)
      -> Instrument Real (T (T VectorSize Real)))
arcStringStereoFM Serial VectorSize Real
-> CodeGenFunction r (Serial VectorSize Real)
forall r.
Serial VectorSize Real
-> CodeGenFunction r (Serial VectorSize Real)
forall a r.
(PseudoRing a, IntegerConstant a, Fraction a) =>
a -> CodeGenFunction r a
WaveL.approxSine2
arcSquareStringStereoFM :: IO
  (Real
   -> T Real
   -> T Real
   -> T (T Real)
   -> Instrument Real (T (T VectorSize Real)))
arcSquareStringStereoFM = (forall r.
 Serial VectorSize Real
 -> CodeGenFunction r (Serial VectorSize Real))
-> IO
     (Real
      -> T Real
      -> T Real
      -> T (T Real)
      -> Instrument Real (T (T VectorSize Real)))
arcStringStereoFM Serial VectorSize Real
-> CodeGenFunction r (Serial VectorSize Real)
forall r.
Serial VectorSize Real
-> CodeGenFunction r (Serial VectorSize Real)
forall a r.
(PseudoRing a, IntegerConstant a, Fraction a) =>
a -> CodeGenFunction r a
WaveL.square
arcTriangleStringStereoFM :: IO
  (Real
   -> T Real
   -> T Real
   -> T (T Real)
   -> Instrument Real (T (T VectorSize Real)))
arcTriangleStringStereoFM = (forall r.
 Serial VectorSize Real
 -> CodeGenFunction r (Serial VectorSize Real))
-> IO
     (Real
      -> T Real
      -> T Real
      -> T (T Real)
      -> Instrument Real (T (T VectorSize Real)))
arcStringStereoFM Serial VectorSize Real
-> CodeGenFunction r (Serial VectorSize Real)
forall r.
Serial VectorSize Real
-> CodeGenFunction r (Serial VectorSize Real)
forall a r.
(PseudoRing a, RationalConstant a, Fraction a) =>
a -> CodeGenFunction r a
WaveL.triangle

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

softStringShapeCore ::
   (forall r.
    VectorValue ->
    VectorValue ->
    LLVM.CodeGenFunction r VectorValue) ->
   IO (Real ->
       PC.T Real ->
       PC.T Real ->
       PC.T (BM.T Real) ->
       Instrument Real (Stereo.T Vector))
softStringShapeCore :: (forall r.
 Serial VectorSize Real
 -> Serial VectorSize Real
 -> CodeGenFunction r (Serial VectorSize Real))
-> IO
     (Real
      -> T Real
      -> T Real
      -> T (T Real)
      -> Instrument Real (T (T VectorSize Real)))
softStringShapeCore forall r.
Serial VectorSize Real
-> Serial VectorSize Real
-> CodeGenFunction r (Serial VectorSize Real)
wave =
   ((SampleRate Real
  -> T Real
  -> T Real
  -> (T (T Real), Real)
  -> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real))))
 -> (Real
     -> SampleRate Real
     -> Real
     -> LazyTime
     -> Vector (T VectorSize Real))
 -> Real
 -> T Real
 -> T Real
 -> T (T Real)
 -> Instrument Real (T (T VectorSize Real)))
-> IO
     (SampleRate Real
      -> T Real
      -> T Real
      -> (T (T Real), Real)
      -> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real))))
-> IO
     (Real
      -> SampleRate Real
      -> Real
      -> LazyTime
      -> Vector (T VectorSize Real))
-> IO
     (Real
      -> T Real
      -> T Real
      -> T (T Real)
      -> Instrument Real (T (T VectorSize Real)))
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 Real
-> T Real
-> (T (T Real), Real)
-> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real)))
osc Real
-> SampleRate Real
-> Real
-> LazyTime
-> Vector (T VectorSize Real)
env Real
att T Real
det T Real
dist T (T Real)
fm SampleRate Real
sr Real
vel Real
freq LazyTime
dur ->
         T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real)))
-> Vector (T VectorSize Real) -> T (T (T VectorSize Real))
forall a b.
(Storable a, Storable b) =>
T (Vector a) (Vector b) -> Vector a -> Vector b
pioApply (SampleRate Real
-> T Real
-> T Real
-> (T (T Real), Real)
-> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real)))
osc SampleRate Real
sr T Real
det T Real
dist (T (T Real)
fm, Real
freq)) (Real
-> SampleRate Real
-> Real
-> LazyTime
-> Vector (T VectorSize Real)
env Real
att SampleRate Real
sr Real
vel LazyTime
dur))
      (let osci ::
              Exp Real ->
              Causal.T
                 (VectorValue,
                       {- wave shape parameter -}
                  (VectorValue, VectorValue)
                       {- detune, frequency modulation -})
                 VectorValue
           osci :: Exp Real
-> T (Serial VectorSize Real,
      (Serial VectorSize Real, Serial VectorSize Real))
     (Serial VectorSize Real)
osci Exp Real
d =
              (forall r.
 Serial VectorSize Real
 -> Serial VectorSize Real
 -> CodeGenFunction r (Serial VectorSize Real))
-> T (Serial VectorSize Real,
      (Serial VectorSize Real, Serial VectorSize Real))
     (Serial 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 Serial VectorSize Real
-> Serial VectorSize Real
-> CodeGenFunction r (Serial VectorSize Real)
forall r.
Serial VectorSize Real
-> Serial VectorSize Real
-> CodeGenFunction r (Serial VectorSize Real)
wave
              T (Serial VectorSize Real,
   (Serial VectorSize Real, Serial VectorSize Real))
  (Serial VectorSize Real)
-> T (Serial VectorSize Real,
      (Serial VectorSize Real, Serial VectorSize Real))
     (Serial VectorSize Real,
      (Serial VectorSize Real, Serial VectorSize Real))
-> T (Serial VectorSize Real,
      (Serial VectorSize Real, Serial VectorSize Real))
     (Serial VectorSize Real)
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
<<<
              T (Serial VectorSize Real, Serial VectorSize Real)
  (Serial VectorSize Real, Serial VectorSize Real)
-> T (Serial VectorSize Real,
      (Serial VectorSize Real, Serial VectorSize Real))
     (Serial VectorSize Real,
      (Serial VectorSize Real, Serial 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 (Serial VectorSize Real)
-> T (Serial VectorSize Real)
     (Serial VectorSize Real, Serial VectorSize Real)
forall (process :: * -> * -> *) a b.
C process =>
SignalOf process a -> process b (a, b)
CausalClass.feedFst SignalOf T (Serial VectorSize Real)
T (Serial VectorSize Real)
forall a. C a => a
zero
                  T (Serial VectorSize Real)
  (Serial VectorSize Real, Serial VectorSize Real)
-> T (Serial VectorSize Real, Serial VectorSize Real)
     (Serial VectorSize Real)
-> T (Serial VectorSize Real, Serial VectorSize Real)
     (Serial VectorSize Real, Serial VectorSize Real)
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
<<<
                  T (Serial VectorSize Real, Serial VectorSize Real)
  (Serial VectorSize Real)
forall a. PseudoRing a => T (a, a) a
Causal.envelope
                  T (Serial VectorSize Real, Serial VectorSize Real)
  (Serial VectorSize Real)
-> T (Serial VectorSize Real, Serial VectorSize Real)
     (Serial VectorSize Real, Serial VectorSize Real)
-> T (Serial VectorSize Real, Serial VectorSize Real)
     (Serial VectorSize Real)
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
<<<
                  T (Serial VectorSize Real) (Serial VectorSize Real)
-> T (Serial VectorSize Real, Serial VectorSize Real)
     (Serial VectorSize Real, Serial 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 (Serial VectorSize Real) (Serial VectorSize Real)
forall a. C a => a
one T (Serial VectorSize Real) (Serial VectorSize Real)
-> T (Serial VectorSize Real) (Serial VectorSize Real)
-> T (Serial VectorSize Real) (Serial VectorSize Real)
forall a. C a => a -> a -> a
+ Exp Real -> T (Serial VectorSize Real) (Serial VectorSize Real)
forall n a.
(Positive n, PseudoRing a) =>
Exp a -> T (Serial n a) (Serial n a)
CausalPS.amplify Exp Real
d))
       in  DSL
  (SampleRate Real
   -> T Real
   -> T Real
   -> (T (T Real), Real)
   -> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real))))
  (Element
     (In
        (SampleRate Real
         -> T Real
         -> T Real
         -> (T (T Real), Real)
         -> T (Vector (T VectorSize Real))
              (Vector (T (T VectorSize Real))))))
  (Element
     (Out
        (SampleRate Real
         -> T Real
         -> T Real
         -> (T (T Real), Real)
         -> T (Vector (T VectorSize Real))
              (Vector (T (T VectorSize Real))))))
-> IO
     (SampleRate Real
      -> T Real
      -> T Real
      -> (T (T Real), Real)
      -> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real))))
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 Real
    -> T Real
    -> (T (T Real), Real)
    -> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real))))
   (Element
      (In
         (SampleRate Real
          -> T Real
          -> T Real
          -> (T (T Real), Real)
          -> T (Vector (T VectorSize Real))
               (Vector (T (T VectorSize Real))))))
   (Element
      (Out
         (SampleRate Real
          -> T Real
          -> T Real
          -> (T (T Real), Real)
          -> T (Vector (T VectorSize Real))
               (Vector (T (T VectorSize Real))))))
 -> IO
      (SampleRate Real
       -> T Real
       -> T Real
       -> (T (T Real), Real)
       -> T (Vector (T VectorSize Real))
            (Vector (T (T VectorSize Real)))))
-> DSL
     (SampleRate Real
      -> T Real
      -> T Real
      -> (T (T Real), Real)
      -> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real))))
     (Element
        (In
           (SampleRate Real
            -> T Real
            -> T Real
            -> (T (T Real), Real)
            -> T (Vector (T VectorSize Real))
                 (Vector (T (T VectorSize Real))))))
     (Element
        (Out
           (SampleRate Real
            -> T Real
            -> T Real
            -> (T (T Real), Real)
            -> T (Vector (T VectorSize Real))
                 (Vector (T (T VectorSize Real))))))
-> IO
     (SampleRate Real
      -> T Real
      -> T Real
      -> (T (T Real), Real)
      -> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real))))
forall a b. (a -> b) -> a -> b
$
           (InputArg (Control (T RealValue)) (Exp Real)
 -> InputArg (Control (T RealValue)) (Exp Real)
 -> InputArg (Modulation Real) (Exp Real)
 -> SampleRate (Exp Real)
 -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
-> SampleRate (Exp Real)
-> Unwrapped
     (InputArg (Control (T RealValue)) (Exp Real)
      -> InputArg (Control (T RealValue)) (Exp Real)
      -> InputArg (Modulation Real) (Exp Real)
      -> SampleRate (Exp Real)
      -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
forall a f. Wrapped a f => f -> SampleRate a -> Unwrapped f
wrapped ((InputArg (Control (T RealValue)) (Exp Real)
  -> InputArg (Control (T RealValue)) (Exp Real)
  -> InputArg (Modulation Real) (Exp Real)
  -> SampleRate (Exp Real)
  -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
 -> SampleRate (Exp Real)
 -> Unwrapped
      (InputArg (Control (T RealValue)) (Exp Real)
       -> InputArg (Control (T RealValue)) (Exp Real)
       -> InputArg (Modulation Real) (Exp Real)
       -> SampleRate (Exp Real)
       -> T (Serial VectorSize Real) (T (T (T VectorSize Real)))))
-> (InputArg (Control (T RealValue)) (Exp Real)
    -> InputArg (Control (T RealValue)) (Exp Real)
    -> InputArg (Modulation Real) (Exp Real)
    -> SampleRate (Exp Real)
    -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
-> SampleRate (Exp Real)
-> Unwrapped
     (InputArg (Control (T RealValue)) (Exp Real)
      -> InputArg (Control (T RealValue)) (Exp Real)
      -> InputArg (Modulation Real) (Exp Real)
      -> SampleRate (Exp Real)
      -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
forall a b. (a -> b) -> a -> b
$ \(Control T (T RealValue)
det) (Control T (T RealValue)
dist) (Modulation T (T (T RealValue))
fm) ->
           (SampleRate (Exp Real) -> Exp Real -> Exp Real)
-> Exp Real
-> (Exp Real
    -> SampleRate (Exp Real)
    -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
-> SampleRate (Exp Real)
-> T (Serial VectorSize 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 (Serial VectorSize Real) (T (T (T VectorSize Real))))
 -> SampleRate (Exp Real)
 -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
-> (Exp Real
    -> SampleRate (Exp Real)
    -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
-> SampleRate (Exp Real)
-> T (Serial VectorSize Real) (T (T (T VectorSize Real)))
forall a b. (a -> b) -> a -> b
$ \Exp Real
speed SampleRate (Exp Real)
_sr ->
           T (Serial VectorSize Real) -> T (T (T VectorSize Real))
forall a. T (T a) -> T (T a)
Stereo.multiValue (T (Serial VectorSize Real) -> T (T (T VectorSize Real)))
-> T (Serial VectorSize Real) (T (Serial VectorSize Real))
-> T (Serial VectorSize Real) (T (T (T VectorSize Real)))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$>
           (T (Serial VectorSize Real, T (Serial VectorSize Real))
  (T (Serial VectorSize Real))
forall a. PseudoRing a => T (a, T a) (T a)
Causal.envelopeStereo T (Serial VectorSize Real, T (Serial VectorSize Real))
  (T (Serial VectorSize Real))
-> SignalOf T (T (Serial VectorSize Real))
-> T (Serial VectorSize Real) (T (Serial VectorSize Real))
forall (process :: * -> * -> *) a b c.
C process =>
process (a, b) c -> SignalOf process b -> process a c
$>
              ((Exp Real
 -> T (Serial VectorSize Real,
       (Serial VectorSize Real, Serial VectorSize Real))
      (Serial VectorSize Real))
-> T (Serial VectorSize Real,
      (Serial VectorSize Real, Serial VectorSize Real))
     (T (Serial VectorSize Real))
forall a.
(Exp Real -> T a (Serial VectorSize Real))
-> T a (T (Serial VectorSize Real))
phaserOsci Exp Real
-> T (Serial VectorSize Real,
      (Serial VectorSize Real, Serial VectorSize Real))
     (Serial VectorSize Real)
osci
               T (Serial VectorSize Real,
   (Serial VectorSize Real, Serial VectorSize Real))
  (T (Serial VectorSize Real))
-> SignalOf T (Serial VectorSize Real)
-> T (Serial VectorSize Real, Serial VectorSize Real)
     (T (Serial VectorSize Real))
forall (process :: * -> * -> *) a b c.
C process =>
process (a, b) c -> SignalOf process a -> process b c
$< T (T RealValue) -> T (Serial VectorSize Real)
piecewiseConstantVector T (T RealValue)
dist
               T (Serial VectorSize Real, Serial VectorSize Real)
  (T (Serial VectorSize Real))
-> SignalOf T (Serial VectorSize Real)
-> T (Serial VectorSize Real) (T (Serial VectorSize Real))
forall (process :: * -> * -> *) a b c.
C process =>
process (a, b) c -> SignalOf process a -> process b c
$< T (T RealValue) -> T (Serial VectorSize Real)
piecewiseConstantVector T (T RealValue)
det
               T (Serial VectorSize Real) (T (Serial VectorSize Real))
-> SignalOf T (Serial VectorSize Real)
-> SignalOf T (T (Serial VectorSize Real))
forall (process :: * -> * -> *) a b.
C process =>
process a b -> SignalOf process a -> SignalOf process b
$* Exp Real -> T (T (T RealValue)) -> T (Serial VectorSize Real)
frequencyFromBendModulation Exp Real
speed T (T (T RealValue))
fm)))
      IO
  (Real
   -> SampleRate Real
   -> Real
   -> LazyTime
   -> Vector (T VectorSize Real))
softStringReleaseEnvelope

fmStringStereoFM ::
   IO (Real ->
       PC.T Real ->
       PC.T Real ->
       PC.T Real ->
       PC.T (BM.T Real) ->
       Instrument Real (Stereo.T Vector))
fmStringStereoFM :: IO
  (Real
   -> T Real
   -> T Real
   -> T Real
   -> T (T Real)
   -> Instrument Real (T (T VectorSize Real)))
fmStringStereoFM =
   ((SampleRate Real
  -> T Real
  -> T Real
  -> T Real
  -> (T (T Real), Real)
  -> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real))))
 -> (Real
     -> SampleRate Real
     -> Real
     -> LazyTime
     -> Vector (T VectorSize Real))
 -> Real
 -> T Real
 -> T Real
 -> T Real
 -> T (T Real)
 -> Instrument Real (T (T VectorSize Real)))
-> IO
     (SampleRate Real
      -> T Real
      -> T Real
      -> T Real
      -> (T (T Real), Real)
      -> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real))))
-> IO
     (Real
      -> SampleRate Real
      -> Real
      -> LazyTime
      -> Vector (T VectorSize Real))
-> IO
     (Real
      -> T Real
      -> T Real
      -> T Real
      -> T (T Real)
      -> Instrument Real (T (T VectorSize Real)))
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 Real
-> T Real
-> T Real
-> (T (T Real), Real)
-> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real)))
osc Real
-> SampleRate Real
-> Real
-> LazyTime
-> Vector (T VectorSize Real)
env Real
att T Real
det T Real
depth T Real
dist T (T Real)
fm SampleRate Real
sr Real
vel Real
freq LazyTime
dur ->
         T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real)))
-> Vector (T VectorSize Real) -> T (T (T VectorSize Real))
forall a b.
(Storable a, Storable b) =>
T (Vector a) (Vector b) -> Vector a -> Vector b
pioApply (SampleRate Real
-> T Real
-> T Real
-> T Real
-> (T (T Real), Real)
-> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real)))
osc SampleRate Real
sr T Real
det T Real
depth T Real
dist (T (T Real)
fm, Real
freq)) (Real
-> SampleRate Real
-> Real
-> LazyTime
-> Vector (T VectorSize Real)
env Real
att SampleRate Real
sr Real
vel LazyTime
dur))
      (let osci ::
              Exp Real ->
              Causal.T
                 ((VectorValue, VectorValue)
                       {- phase modulation depth, modulator distortion -},
                  (VectorValue, VectorValue)
                       {- detune, frequency modulation -})
                 VectorValue
           osci :: Exp Real
-> T ((Serial VectorSize Real, Serial VectorSize Real),
      (Serial VectorSize Real, Serial VectorSize Real))
     (Serial VectorSize Real)
osci Exp Real
d =
              (forall r.
 Serial VectorSize Real
 -> CodeGenFunction r (Serial VectorSize Real))
-> T (Serial VectorSize Real, Serial VectorSize Real)
     (Serial 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 Serial VectorSize Real
-> CodeGenFunction r (Serial VectorSize Real)
forall r.
Serial VectorSize Real
-> CodeGenFunction r (Serial VectorSize Real)
forall a r.
(PseudoRing a, IntegerConstant a, Fraction a) =>
a -> CodeGenFunction r a
WaveL.approxSine2
              T (Serial VectorSize Real, Serial VectorSize Real)
  (Serial VectorSize Real)
-> T ((Serial VectorSize Real, Serial VectorSize Real),
      (Serial VectorSize Real, Serial VectorSize Real))
     (Serial VectorSize Real, Serial VectorSize Real)
-> T ((Serial VectorSize Real, Serial VectorSize Real),
      (Serial VectorSize Real, Serial VectorSize Real))
     (Serial VectorSize Real)
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
<<<
              (T (Serial VectorSize Real, Serial VectorSize Real)
  (Serial VectorSize Real)
forall a. PseudoRing a => T (a, a) a
Causal.envelope
               T (Serial VectorSize Real, Serial VectorSize Real)
  (Serial VectorSize Real)
-> T ((Serial VectorSize Real, Serial VectorSize Real),
      Serial VectorSize Real)
     (Serial VectorSize Real, Serial VectorSize Real)
-> T ((Serial VectorSize Real, Serial VectorSize Real),
      Serial VectorSize Real)
     (Serial VectorSize Real)
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
<<<
               T (Serial VectorSize Real, Serial VectorSize Real)
  (Serial VectorSize Real)
-> T (Serial VectorSize Real,
      (Serial VectorSize Real, Serial VectorSize Real))
     (Serial VectorSize Real, Serial 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.
 Serial VectorSize Real
 -> Serial VectorSize Real
 -> CodeGenFunction r (Serial VectorSize Real))
-> T (Serial VectorSize Real,
      (Serial VectorSize Real, Serial VectorSize Real))
     (Serial 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 Serial VectorSize Real
-> Serial VectorSize Real
-> CodeGenFunction r (Serial VectorSize Real)
forall r.
Serial VectorSize Real
-> Serial VectorSize Real
-> CodeGenFunction r (Serial VectorSize Real)
forall a r.
(Field a, RationalConstant a, Real a) =>
a -> a -> CodeGenFunction r a
WaveL.rationalApproxSine1
                     T (Serial VectorSize Real,
   (Serial VectorSize Real, Serial VectorSize Real))
  (Serial VectorSize Real)
-> T (Serial VectorSize Real, Serial VectorSize Real)
     (Serial VectorSize Real,
      (Serial VectorSize Real, Serial VectorSize Real))
-> T (Serial VectorSize Real, Serial VectorSize Real)
     (Serial VectorSize Real)
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
<<< T (Serial VectorSize Real)
  (Serial VectorSize Real, Serial VectorSize Real)
-> T (Serial VectorSize Real, Serial VectorSize Real)
     (Serial VectorSize Real,
      (Serial VectorSize Real, Serial 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 (Serial VectorSize Real)
-> T (Serial VectorSize Real)
     (Serial VectorSize Real, Serial VectorSize Real)
forall (process :: * -> * -> *) a b.
C process =>
SignalOf process a -> process b (a, b)
CausalClass.feedFst SignalOf T (Serial VectorSize Real)
T (Serial VectorSize Real)
forall a. C a => a
zero))
               T (Serial VectorSize Real,
   (Serial VectorSize Real, Serial VectorSize Real))
  (Serial VectorSize Real, Serial VectorSize Real)
-> (((Serial VectorSize Real, Serial VectorSize Real),
     Serial VectorSize Real)
    -> (Serial VectorSize Real,
        (Serial VectorSize Real, Serial VectorSize Real)))
-> T ((Serial VectorSize Real, Serial VectorSize Real),
      Serial VectorSize Real)
     (Serial VectorSize Real, Serial VectorSize Real)
forall (a :: * -> * -> *) c d b.
Arrow a =>
a c d -> (b -> c) -> a b d
<<^
               (\((Serial VectorSize Real
dp, Serial VectorSize Real
ds), Serial VectorSize Real
f) -> (Serial VectorSize Real
dp, (Serial VectorSize Real
ds, Serial VectorSize Real
f))))
               T ((Serial VectorSize Real, Serial VectorSize Real),
   Serial VectorSize Real)
  (Serial VectorSize Real)
-> T ((Serial VectorSize Real, Serial VectorSize Real),
      Serial VectorSize Real)
     (Serial VectorSize Real)
-> T ((Serial VectorSize Real, Serial VectorSize Real),
      Serial VectorSize Real)
     (Serial VectorSize Real, Serial 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')
&&& (((Serial VectorSize Real, Serial VectorSize Real),
  Serial VectorSize Real)
 -> Serial VectorSize Real)
-> T ((Serial VectorSize Real, Serial VectorSize Real),
      Serial VectorSize Real)
     (Serial VectorSize Real)
forall b c. (b -> c) -> T b c
forall (a :: * -> * -> *) b c. Arrow a => (b -> c) -> a b c
arr ((Serial VectorSize Real, Serial VectorSize Real),
 Serial VectorSize Real)
-> Serial VectorSize Real
forall a b. (a, b) -> b
snd
              T ((Serial VectorSize Real, Serial VectorSize Real),
   Serial VectorSize Real)
  (Serial VectorSize Real, Serial VectorSize Real)
-> T ((Serial VectorSize Real, Serial VectorSize Real),
      (Serial VectorSize Real, Serial VectorSize Real))
     ((Serial VectorSize Real, Serial VectorSize Real),
      Serial VectorSize Real)
-> T ((Serial VectorSize Real, Serial VectorSize Real),
      (Serial VectorSize Real, Serial VectorSize Real))
     (Serial VectorSize Real, Serial VectorSize Real)
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
<<<
              T (Serial VectorSize Real, Serial VectorSize Real)
  (Serial VectorSize Real)
-> T ((Serial VectorSize Real, Serial VectorSize Real),
      (Serial VectorSize Real, Serial VectorSize Real))
     ((Serial VectorSize Real, Serial VectorSize Real),
      Serial 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 (Serial VectorSize Real, Serial VectorSize Real)
  (Serial VectorSize Real)
forall a. PseudoRing a => T (a, a) a
Causal.envelope T (Serial VectorSize Real, Serial VectorSize Real)
  (Serial VectorSize Real)
-> T (Serial VectorSize Real, Serial VectorSize Real)
     (Serial VectorSize Real, Serial VectorSize Real)
-> T (Serial VectorSize Real, Serial VectorSize Real)
     (Serial VectorSize Real)
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
<<< T (Serial VectorSize Real) (Serial VectorSize Real)
-> T (Serial VectorSize Real, Serial VectorSize Real)
     (Serial VectorSize Real, Serial 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 (Serial VectorSize Real) (Serial VectorSize Real)
forall a. C a => a
one T (Serial VectorSize Real) (Serial VectorSize Real)
-> T (Serial VectorSize Real) (Serial VectorSize Real)
-> T (Serial VectorSize Real) (Serial VectorSize Real)
forall a. C a => a -> a -> a
+ Exp Real -> T (Serial VectorSize Real) (Serial VectorSize Real)
forall n a.
(Positive n, PseudoRing a) =>
Exp a -> T (Serial n a) (Serial n a)
CausalPS.amplify Exp Real
d))
       in  DSL
  (SampleRate Real
   -> T Real
   -> T Real
   -> T Real
   -> (T (T Real), Real)
   -> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real))))
  (Element
     (In
        (SampleRate Real
         -> T Real
         -> T Real
         -> T Real
         -> (T (T Real), Real)
         -> T (Vector (T VectorSize Real))
              (Vector (T (T VectorSize Real))))))
  (Element
     (Out
        (SampleRate Real
         -> T Real
         -> T Real
         -> T Real
         -> (T (T Real), Real)
         -> T (Vector (T VectorSize Real))
              (Vector (T (T VectorSize Real))))))
-> IO
     (SampleRate Real
      -> T Real
      -> T Real
      -> T Real
      -> (T (T Real), Real)
      -> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real))))
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 Real
    -> T Real
    -> T Real
    -> (T (T Real), Real)
    -> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real))))
   (Element
      (In
         (SampleRate Real
          -> T Real
          -> T Real
          -> T Real
          -> (T (T Real), Real)
          -> T (Vector (T VectorSize Real))
               (Vector (T (T VectorSize Real))))))
   (Element
      (Out
         (SampleRate Real
          -> T Real
          -> T Real
          -> T Real
          -> (T (T Real), Real)
          -> T (Vector (T VectorSize Real))
               (Vector (T (T VectorSize Real))))))
 -> IO
      (SampleRate Real
       -> T Real
       -> T Real
       -> T Real
       -> (T (T Real), Real)
       -> T (Vector (T VectorSize Real))
            (Vector (T (T VectorSize Real)))))
-> DSL
     (SampleRate Real
      -> T Real
      -> T Real
      -> T Real
      -> (T (T Real), Real)
      -> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real))))
     (Element
        (In
           (SampleRate Real
            -> T Real
            -> T Real
            -> T Real
            -> (T (T Real), Real)
            -> T (Vector (T VectorSize Real))
                 (Vector (T (T VectorSize Real))))))
     (Element
        (Out
           (SampleRate Real
            -> T Real
            -> T Real
            -> T Real
            -> (T (T Real), Real)
            -> T (Vector (T VectorSize Real))
                 (Vector (T (T VectorSize Real))))))
-> IO
     (SampleRate Real
      -> T Real
      -> T Real
      -> T Real
      -> (T (T Real), Real)
      -> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real))))
forall a b. (a -> b) -> a -> b
$
           (InputArg (Control (T RealValue)) (Exp Real)
 -> InputArg (Control (T RealValue)) (Exp Real)
 -> InputArg (Control (T RealValue)) (Exp Real)
 -> InputArg (Modulation Real) (Exp Real)
 -> SampleRate (Exp Real)
 -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
-> SampleRate (Exp Real)
-> Unwrapped
     (InputArg (Control (T RealValue)) (Exp Real)
      -> InputArg (Control (T RealValue)) (Exp Real)
      -> InputArg (Control (T RealValue)) (Exp Real)
      -> InputArg (Modulation Real) (Exp Real)
      -> SampleRate (Exp Real)
      -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
forall a f. Wrapped a f => f -> SampleRate a -> Unwrapped f
wrapped ((InputArg (Control (T RealValue)) (Exp Real)
  -> InputArg (Control (T RealValue)) (Exp Real)
  -> InputArg (Control (T RealValue)) (Exp Real)
  -> InputArg (Modulation Real) (Exp Real)
  -> SampleRate (Exp Real)
  -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
 -> SampleRate (Exp Real)
 -> Unwrapped
      (InputArg (Control (T RealValue)) (Exp Real)
       -> InputArg (Control (T RealValue)) (Exp Real)
       -> InputArg (Control (T RealValue)) (Exp Real)
       -> InputArg (Modulation Real) (Exp Real)
       -> SampleRate (Exp Real)
       -> T (Serial VectorSize Real) (T (T (T VectorSize Real)))))
-> (InputArg (Control (T RealValue)) (Exp Real)
    -> InputArg (Control (T RealValue)) (Exp Real)
    -> InputArg (Control (T RealValue)) (Exp Real)
    -> InputArg (Modulation Real) (Exp Real)
    -> SampleRate (Exp Real)
    -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
-> SampleRate (Exp Real)
-> Unwrapped
     (InputArg (Control (T RealValue)) (Exp Real)
      -> InputArg (Control (T RealValue)) (Exp Real)
      -> InputArg (Control (T RealValue)) (Exp Real)
      -> InputArg (Modulation Real) (Exp Real)
      -> SampleRate (Exp Real)
      -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
forall a b. (a -> b) -> a -> b
$
              \(Control T (T RealValue)
det) (Control T (T RealValue)
depth) (Control T (T RealValue)
dist) (Modulation T (T (T RealValue))
fm) ->
           (SampleRate (Exp Real) -> Exp Real -> Exp Real)
-> Exp Real
-> (Exp Real
    -> SampleRate (Exp Real)
    -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
-> SampleRate (Exp Real)
-> T (Serial VectorSize 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 (Serial VectorSize Real) (T (T (T VectorSize Real))))
 -> SampleRate (Exp Real)
 -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
-> (Exp Real
    -> SampleRate (Exp Real)
    -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
-> SampleRate (Exp Real)
-> T (Serial VectorSize Real) (T (T (T VectorSize Real)))
forall a b. (a -> b) -> a -> b
$ \Exp Real
speed SampleRate (Exp Real)
_sr ->
              T (Serial VectorSize Real) -> T (T (T VectorSize Real))
forall a. T (T a) -> T (T a)
Stereo.multiValue (T (Serial VectorSize Real) -> T (T (T VectorSize Real)))
-> T (Serial VectorSize Real) (T (Serial VectorSize Real))
-> T (Serial VectorSize Real) (T (T (T VectorSize Real)))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$>
              (T (Serial VectorSize Real, T (Serial VectorSize Real))
  (T (Serial VectorSize Real))
forall a. PseudoRing a => T (a, T a) (T a)
Causal.envelopeStereo T (Serial VectorSize Real, T (Serial VectorSize Real))
  (T (Serial VectorSize Real))
-> T (Serial VectorSize Real)
     (Serial VectorSize Real, T (Serial VectorSize Real))
-> T (Serial VectorSize Real) (T (Serial VectorSize Real))
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
<<<
                 (T (Serial VectorSize Real) (Serial VectorSize Real)
forall a. T a a
forall {k} (cat :: k -> k -> *) (a :: k). Category cat => cat a a
id T (Serial VectorSize Real) (Serial VectorSize Real)
-> T (Serial VectorSize Real) (T (Serial VectorSize Real))
-> T (Serial VectorSize Real)
     (Serial VectorSize Real, T (Serial 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')
&&&
                  ((Exp Real
 -> T ((Serial VectorSize Real, Serial VectorSize Real),
       (Serial VectorSize Real, Serial VectorSize Real))
      (Serial VectorSize Real))
-> T ((Serial VectorSize Real, Serial VectorSize Real),
      (Serial VectorSize Real, Serial VectorSize Real))
     (T (Serial VectorSize Real))
forall a.
(Exp Real -> T a (Serial VectorSize Real))
-> T a (T (Serial VectorSize Real))
phaserOsci Exp Real
-> T ((Serial VectorSize Real, Serial VectorSize Real),
      (Serial VectorSize Real, Serial VectorSize Real))
     (Serial VectorSize Real)
osci
                   T ((Serial VectorSize Real, Serial VectorSize Real),
   (Serial VectorSize Real, Serial VectorSize Real))
  (T (Serial VectorSize Real))
-> T (Serial VectorSize Real)
     ((Serial VectorSize Real, Serial VectorSize Real),
      (Serial VectorSize Real, Serial VectorSize Real))
-> T (Serial VectorSize Real) (T (Serial VectorSize Real))
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
<<<
                   SignalOf T (Serial VectorSize Real, Serial VectorSize Real)
-> T (Serial VectorSize Real, Serial VectorSize Real)
     ((Serial VectorSize Real, Serial VectorSize Real),
      (Serial VectorSize Real, Serial VectorSize Real))
forall (process :: * -> * -> *) a b.
C process =>
SignalOf process a -> process b (b, a)
CausalClass.feedSnd
                      ((Serial VectorSize Real
 -> Serial VectorSize Real
 -> (Serial VectorSize Real, Serial VectorSize Real))
-> T (Serial VectorSize Real)
-> T (Serial VectorSize Real)
-> T (Serial VectorSize Real, Serial VectorSize Real)
forall a b c. (a -> b -> c) -> T a -> T b -> T c
forall (f :: * -> *) a b c.
Applicative f =>
(a -> b -> c) -> f a -> f b -> f c
liftA2 (,)
                         (T (T RealValue) -> T (Serial VectorSize Real)
piecewiseConstantVector T (T RealValue)
det)
                         (Exp Real -> T (T (T RealValue)) -> T (Serial VectorSize Real)
frequencyFromBendModulation Exp Real
speed T (T (T RealValue))
fm))
                   T (Serial VectorSize Real, Serial VectorSize Real)
  ((Serial VectorSize Real, Serial VectorSize Real),
   (Serial VectorSize Real, Serial VectorSize Real))
-> T (Serial VectorSize Real)
     (Serial VectorSize Real, Serial VectorSize Real)
-> T (Serial VectorSize Real)
     ((Serial VectorSize Real, Serial VectorSize Real),
      (Serial VectorSize Real, Serial VectorSize Real))
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
<<<
                   SignalOf T (Serial VectorSize Real)
-> T (Serial VectorSize Real)
     (Serial VectorSize Real, Serial VectorSize Real)
forall (process :: * -> * -> *) a b.
C process =>
SignalOf process a -> process b (b, a)
CausalClass.feedSnd (T (T RealValue) -> T (Serial VectorSize Real)
piecewiseConstantVector T (T RealValue)
dist)
                   T (Serial VectorSize Real)
  (Serial VectorSize Real, Serial VectorSize Real)
-> T (Serial VectorSize Real) (Serial VectorSize Real)
-> T (Serial VectorSize Real)
     (Serial VectorSize Real, Serial VectorSize Real)
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
<<<
                   (T (Serial VectorSize Real, Serial VectorSize Real)
  (Serial VectorSize Real)
forall a. PseudoRing a => T (a, a) a
Causal.envelope T (Serial VectorSize Real, Serial VectorSize Real)
  (Serial VectorSize Real)
-> SignalOf T (Serial VectorSize Real)
-> T (Serial VectorSize Real) (Serial VectorSize Real)
forall (process :: * -> * -> *) a b c.
C process =>
process (a, b) c -> SignalOf process a -> process b c
$< T (T RealValue) -> T (Serial VectorSize Real)
piecewiseConstantVector T (T RealValue)
depth)))))
      IO
  (Real
   -> SampleRate Real
   -> Real
   -> LazyTime
   -> Vector (T VectorSize Real))
softStringReleaseEnvelope


stereoNoise :: SampleRate (Exp Real) -> Sig.T (Stereo.T VectorValue)
stereoNoise :: SampleRate (Exp Real) -> T (T (Serial VectorSize Real))
stereoNoise =
   (SampleRate (Exp Real) -> Exp Real -> Exp Real)
-> Exp Real
-> (Exp Real
    -> SampleRate (Exp Real) -> T (T (Serial VectorSize Real)))
-> SampleRate (Exp Real)
-> T (T (Serial 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 (Serial VectorSize Real)))
 -> SampleRate (Exp Real) -> T (T (Serial VectorSize Real)))
-> (Exp Real
    -> SampleRate (Exp Real) -> T (T (Serial VectorSize Real)))
-> SampleRate (Exp Real)
-> T (T (Serial VectorSize Real))
forall a b. (a -> b) -> a -> b
$ \Exp Real
noiseRef SampleRate (Exp Real)
_sr ->
   (Exp Word32 -> T (Serial VectorSize Real))
-> T (Exp Word32) -> T (T (Serial 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)
traverse
      (\Exp Word32
uid -> Exp Word32 -> Exp Real -> T (Serial 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
uid Exp Real
noiseRef)
      (Exp Word32 -> Exp Word32 -> T (Exp Word32)
forall a. a -> a -> T a
Stereo.cons Exp Word32
13 Exp Word32
14)

windCore ::
   Sig.T (Const.T RealValue) ->
   Sig.T (Const.T (BM.T RealValue)) ->
   SampleRate (Exp Real) ->
   Sig.T (Stereo.T VectorValue)
windCore :: T (T RealValue)
-> T (T (T RealValue))
-> SampleRate (Exp Real)
-> T (T (Serial VectorSize Real))
windCore T (T RealValue)
reson T (T (T RealValue))
fm =
   (SampleRate (Exp Real) -> Exp Real -> Exp Real)
-> Exp Real
-> (Exp Real
    -> SampleRate (Exp Real) -> T (T (Serial VectorSize Real)))
-> SampleRate (Exp Real)
-> T (T (Serial 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 (T (Serial VectorSize Real)))
 -> SampleRate (Exp Real) -> T (T (Serial VectorSize Real)))
-> (Exp Real
    -> SampleRate (Exp Real) -> T (T (Serial VectorSize Real)))
-> SampleRate (Exp Real)
-> T (T (Serial VectorSize Real))
forall a b. (a -> b) -> a -> b
$ \Exp Real
speed SampleRate (Exp Real)
sr ->
   T (Parameter (Pos Dec8 EndDesc) (MultiValuesOf (Exp Real)),
   Serial VectorSize Real)
  (Serial VectorSize Real)
-> T (Parameter (Pos Dec8 EndDesc) (MultiValuesOf (Exp Real)),
      T (Serial VectorSize Real))
     (T (Serial 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 (Pos Dec8 EndDesc) (MultiValuesOf (Exp Real)),
   Serial VectorSize Real)
  (Serial VectorSize Real)
forall parameter a b. C parameter a b => T (parameter, a) b
CtrlPS.process
    T (Parameter (Pos Dec8 EndDesc) (MultiValuesOf (Exp Real)),
   T (Serial VectorSize Real))
  (T (Serial VectorSize Real))
-> SignalOf
     T (Parameter (Pos Dec8 EndDesc) (MultiValuesOf (Exp Real)))
-> T (T (Serial VectorSize Real)) (T (Serial VectorSize Real))
forall (process :: * -> * -> *) a b c.
C process =>
process (a, b) c -> SignalOf process a -> process b c
$< ((Exp Real -> Exp Real -> Parameter (Pos Dec8 EndDesc) (Exp Real))
-> T (RealValue, RealValue)
     (Parameter (Pos Dec8 EndDesc) (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 (Pos Dec8 EndDesc)
-> Exp Real -> Exp Real -> Parameter (Pos Dec8 EndDesc) (Exp Real)
forall n a. (Natural n, C a) => Proxy n -> a -> a -> Parameter n a
MoogL.parameter Proxy (Pos Dec8 EndDesc)
TypeNum.d8)
          T (RealValue, RealValue)
  (Parameter (Pos Dec8 EndDesc) (MultiValuesOf (Exp Real)))
-> SignalOf T RealValue
-> T RealValue
     (Parameter (Pos Dec8 EndDesc) (MultiValuesOf (Exp Real)))
forall (process :: * -> * -> *) a b c.
C process =>
process (a, b) c -> SignalOf process a -> process b c
$< T (T RealValue) -> T RealValue
forall a. C a => T (T a) -> T a
piecewiseConstant T (T RealValue)
reson
          T RealValue
  (Parameter (Pos Dec8 EndDesc) (MultiValuesOf (Exp Real)))
-> SignalOf T RealValue
-> SignalOf
     T (Parameter (Pos Dec8 EndDesc) (MultiValuesOf (Exp Real)))
forall (process :: * -> * -> *) a b.
C process =>
process a b -> SignalOf process a -> SignalOf process b
$* ((Exp (T VectorSize Real) -> Exp Real)
-> T (Serial VectorSize Real) RealValue
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 (Serial VectorSize Real) RealValue
-> SignalOf T (Serial VectorSize Real) -> SignalOf T RealValue
forall (process :: * -> * -> *) a b.
C process =>
process a b -> SignalOf process a -> SignalOf process b
$*
                Exp Real -> T (T (T RealValue)) -> T (Serial VectorSize Real)
frequencyFromBendModulation Exp Real
speed T (T (T RealValue))
fm))
    T (T (Serial VectorSize Real)) (T (Serial VectorSize Real))
-> SignalOf T (T (Serial VectorSize Real))
-> SignalOf T (T (Serial VectorSize Real))
forall (process :: * -> * -> *) a b.
C process =>
process a b -> SignalOf process a -> SignalOf process b
$* SampleRate (Exp Real) -> T (T (Serial VectorSize Real))
stereoNoise SampleRate (Exp Real)
sr

wind ::
   IO (Real ->
       PC.T Real ->
       PC.T (BM.T Real) ->
       Instrument Real (Stereo.T Vector))
wind :: IO
  (Real
   -> T Real -> T (T Real) -> Instrument Real (T (T VectorSize Real)))
wind =
   ((SampleRate Real
  -> T Real
  -> (T (T Real), Real)
  -> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real))))
 -> (Real
     -> SampleRate Real
     -> Real
     -> LazyTime
     -> Vector (T VectorSize Real))
 -> Real
 -> T Real
 -> T (T Real)
 -> Instrument Real (T (T VectorSize Real)))
-> IO
     (SampleRate Real
      -> T Real
      -> (T (T Real), Real)
      -> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real))))
-> IO
     (Real
      -> SampleRate Real
      -> Real
      -> LazyTime
      -> Vector (T VectorSize Real))
-> IO
     (Real
      -> T Real -> T (T Real) -> Instrument Real (T (T VectorSize Real)))
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 Real
-> (T (T Real), Real)
-> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real)))
osc Real
-> SampleRate Real
-> Real
-> LazyTime
-> Vector (T VectorSize Real)
env Real
att T Real
reson T (T Real)
fm SampleRate Real
sr Real
vel Real
freq LazyTime
dur ->
         T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real)))
-> Vector (T VectorSize Real) -> T (T (T VectorSize Real))
forall a b.
(Storable a, Storable b) =>
T (Vector a) (Vector b) -> Vector a -> Vector b
pioApply (SampleRate Real
-> T Real
-> (T (T Real), Real)
-> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real)))
osc SampleRate Real
sr T Real
reson (T (T Real)
fm, Real
freq)) (Real
-> SampleRate Real
-> Real
-> LazyTime
-> Vector (T VectorSize Real)
env Real
att SampleRate Real
sr Real
vel LazyTime
dur))
      (DSL
  (SampleRate Real
   -> T Real
   -> (T (T Real), Real)
   -> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real))))
  (Element
     (In
        (SampleRate Real
         -> T Real
         -> (T (T Real), Real)
         -> T (Vector (T VectorSize Real))
              (Vector (T (T VectorSize Real))))))
  (Element
     (Out
        (SampleRate Real
         -> T Real
         -> (T (T Real), Real)
         -> T (Vector (T VectorSize Real))
              (Vector (T (T VectorSize Real))))))
-> IO
     (SampleRate Real
      -> T Real
      -> (T (T Real), Real)
      -> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real))))
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 Real
    -> (T (T Real), Real)
    -> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real))))
   (Element
      (In
         (SampleRate Real
          -> T Real
          -> (T (T Real), Real)
          -> T (Vector (T VectorSize Real))
               (Vector (T (T VectorSize Real))))))
   (Element
      (Out
         (SampleRate Real
          -> T Real
          -> (T (T Real), Real)
          -> T (Vector (T VectorSize Real))
               (Vector (T (T VectorSize Real))))))
 -> IO
      (SampleRate Real
       -> T Real
       -> (T (T Real), Real)
       -> T (Vector (T VectorSize Real))
            (Vector (T (T VectorSize Real)))))
-> DSL
     (SampleRate Real
      -> T Real
      -> (T (T Real), Real)
      -> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real))))
     (Element
        (In
           (SampleRate Real
            -> T Real
            -> (T (T Real), Real)
            -> T (Vector (T VectorSize Real))
                 (Vector (T (T VectorSize Real))))))
     (Element
        (Out
           (SampleRate Real
            -> T Real
            -> (T (T Real), Real)
            -> T (Vector (T VectorSize Real))
                 (Vector (T (T VectorSize Real))))))
-> IO
     (SampleRate Real
      -> T Real
      -> (T (T Real), Real)
      -> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real))))
forall a b. (a -> b) -> a -> b
$
         (InputArg (Control (T RealValue)) (Exp Real)
 -> InputArg (Modulation Real) (Exp Real)
 -> SampleRate (Exp Real)
 -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
-> SampleRate (Exp Real)
-> Unwrapped
     (InputArg (Control (T RealValue)) (Exp Real)
      -> InputArg (Modulation Real) (Exp Real)
      -> SampleRate (Exp Real)
      -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
forall a f. Wrapped a f => f -> SampleRate a -> Unwrapped f
wrapped ((InputArg (Control (T RealValue)) (Exp Real)
  -> InputArg (Modulation Real) (Exp Real)
  -> SampleRate (Exp Real)
  -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
 -> SampleRate (Exp Real)
 -> Unwrapped
      (InputArg (Control (T RealValue)) (Exp Real)
       -> InputArg (Modulation Real) (Exp Real)
       -> SampleRate (Exp Real)
       -> T (Serial VectorSize Real) (T (T (T VectorSize Real)))))
-> (InputArg (Control (T RealValue)) (Exp Real)
    -> InputArg (Modulation Real) (Exp Real)
    -> SampleRate (Exp Real)
    -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
-> SampleRate (Exp Real)
-> Unwrapped
     (InputArg (Control (T RealValue)) (Exp Real)
      -> InputArg (Modulation Real) (Exp Real)
      -> SampleRate (Exp Real)
      -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
forall a b. (a -> b) -> a -> b
$ \(Control T (T RealValue)
reson) (Modulation T (T (T RealValue))
fm) SampleRate (Exp Real)
sr ->
            T (Serial VectorSize Real) -> T (T (T VectorSize Real))
forall a. T (T a) -> T (T a)
Stereo.multiValue (T (Serial VectorSize Real) -> T (T (T VectorSize Real)))
-> T (Serial VectorSize Real, T (Serial VectorSize Real))
     (T (Serial VectorSize Real))
-> T (Serial VectorSize Real, T (Serial VectorSize Real))
     (T (T (T VectorSize Real)))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$>
            T (Serial VectorSize Real, T (Serial VectorSize Real))
  (T (Serial VectorSize Real))
forall a. PseudoRing a => T (a, T a) (T a)
Causal.envelopeStereo T (Serial VectorSize Real, T (Serial VectorSize Real))
  (T (T (T VectorSize Real)))
-> SignalOf T (T (Serial VectorSize Real))
-> T (Serial VectorSize Real) (T (T (T VectorSize Real)))
forall (process :: * -> * -> *) a b c.
C process =>
process (a, b) c -> SignalOf process b -> process a c
$> T (T RealValue)
-> T (T (T RealValue))
-> SampleRate (Exp Real)
-> T (T (Serial VectorSize Real))
windCore T (T RealValue)
reson T (T (T RealValue))
fm SampleRate (Exp Real)
sr)
      IO
  (Real
   -> SampleRate Real
   -> Real
   -> LazyTime
   -> Vector (T VectorSize Real))
softStringReleaseEnvelope


fadeProcess ::
   (A.PseudoRing v, A.IntegerConstant v) =>
   Causal.T a v ->
   Causal.T a v ->
   Causal.T (v, a) v
fadeProcess :: forall v a.
(PseudoRing v, IntegerConstant v) =>
T a v -> T a v -> T (v, a) v
fadeProcess T a v
proc0 T a v
proc1 =
   let k :: T (c, b) c
k = ((c, b) -> c) -> T (c, b) c
forall b c. (b -> c) -> T b c
forall (a :: * -> * -> *) b c. Arrow a => (b -> c) -> a b c
arr (c, b) -> c
forall a b. (a, b) -> a
fst
       a0 :: T (v, a) v
a0 = T a v
proc0 T a v -> ((v, a) -> a) -> T (v, a) v
forall (a :: * -> * -> *) c d b.
Arrow a =>
a c d -> (b -> c) -> a b d
<<^ (v, a) -> a
forall a b. (a, b) -> b
snd
       a1 :: T (v, a) v
a1 = T a v
proc1 T a v -> ((v, a) -> a) -> T (v, a) v
forall (a :: * -> * -> *) c d b.
Arrow a =>
a c d -> (b -> c) -> a b d
<<^ (v, a) -> a
forall a b. (a, b) -> b
snd
   in  (T (v, a) v
forall a. C a => a
oneT (v, a) v -> T (v, a) v -> T (v, a) v
forall a. C a => a -> a -> a
-T (v, a) v
forall {c} {b}. T (c, b) c
k)T (v, a) v -> T (v, a) v -> T (v, a) v
forall a. C a => a -> a -> a
*T (v, a) v
a0 T (v, a) v -> T (v, a) v -> T (v, a) v
forall a. C a => a -> a -> a
+ T (v, a) v
forall {c} {b}. T (c, b) c
kT (v, a) v -> T (v, a) v -> T (v, a) v
forall a. C a => a -> a -> a
*T (v, a) v
a1


windPhaser ::
   IO (Real ->
       PC.T Real ->
       PC.T Real ->
       PC.T Real ->
       PC.T (BM.T Real) ->
       Instrument Real (Stereo.T Vector))
windPhaser :: IO
  (Real
   -> T Real
   -> T Real
   -> T Real
   -> T (T Real)
   -> Instrument Real (T (T VectorSize Real)))
windPhaser =
   ((SampleRate Real
  -> T Real
  -> T Real
  -> T Real
  -> (T (T Real), Real)
  -> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real))))
 -> (Real
     -> SampleRate Real
     -> Real
     -> LazyTime
     -> Vector (T VectorSize Real))
 -> Real
 -> T Real
 -> T Real
 -> T Real
 -> T (T Real)
 -> Instrument Real (T (T VectorSize Real)))
-> IO
     (SampleRate Real
      -> T Real
      -> T Real
      -> T Real
      -> (T (T Real), Real)
      -> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real))))
-> IO
     (Real
      -> SampleRate Real
      -> Real
      -> LazyTime
      -> Vector (T VectorSize Real))
-> IO
     (Real
      -> T Real
      -> T Real
      -> T Real
      -> T (T Real)
      -> Instrument Real (T (T VectorSize Real)))
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 Real
-> T Real
-> T Real
-> (T (T Real), Real)
-> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real)))
osc Real
-> SampleRate Real
-> Real
-> LazyTime
-> Vector (T VectorSize Real)
env Real
att T Real
phaserMix T Real
phaserFreq T Real
reson T (T Real)
fm SampleRate Real
sr Real
vel Real
freq LazyTime
dur ->
         T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real)))
-> Vector (T VectorSize Real) -> T (T (T VectorSize Real))
forall a b.
(Storable a, Storable b) =>
T (Vector a) (Vector b) -> Vector a -> Vector b
pioApply
            (SampleRate Real
-> T Real
-> T Real
-> T Real
-> (T (T Real), Real)
-> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real)))
osc SampleRate Real
sr T Real
phaserMix T Real
phaserFreq T Real
reson (T (T Real)
fm, Real
freq))
            (Real
-> SampleRate Real
-> Real
-> LazyTime
-> Vector (T VectorSize Real)
env Real
att SampleRate Real
sr Real
vel LazyTime
dur))
      (DSL
  (SampleRate Real
   -> T Real
   -> T Real
   -> T Real
   -> (T (T Real), Real)
   -> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real))))
  (Element
     (In
        (SampleRate Real
         -> T Real
         -> T Real
         -> T Real
         -> (T (T Real), Real)
         -> T (Vector (T VectorSize Real))
              (Vector (T (T VectorSize Real))))))
  (Element
     (Out
        (SampleRate Real
         -> T Real
         -> T Real
         -> T Real
         -> (T (T Real), Real)
         -> T (Vector (T VectorSize Real))
              (Vector (T (T VectorSize Real))))))
-> IO
     (SampleRate Real
      -> T Real
      -> T Real
      -> T Real
      -> (T (T Real), Real)
      -> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real))))
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 Real
    -> T Real
    -> T Real
    -> (T (T Real), Real)
    -> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real))))
   (Element
      (In
         (SampleRate Real
          -> T Real
          -> T Real
          -> T Real
          -> (T (T Real), Real)
          -> T (Vector (T VectorSize Real))
               (Vector (T (T VectorSize Real))))))
   (Element
      (Out
         (SampleRate Real
          -> T Real
          -> T Real
          -> T Real
          -> (T (T Real), Real)
          -> T (Vector (T VectorSize Real))
               (Vector (T (T VectorSize Real))))))
 -> IO
      (SampleRate Real
       -> T Real
       -> T Real
       -> T Real
       -> (T (T Real), Real)
       -> T (Vector (T VectorSize Real))
            (Vector (T (T VectorSize Real)))))
-> DSL
     (SampleRate Real
      -> T Real
      -> T Real
      -> T Real
      -> (T (T Real), Real)
      -> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real))))
     (Element
        (In
           (SampleRate Real
            -> T Real
            -> T Real
            -> T Real
            -> (T (T Real), Real)
            -> T (Vector (T VectorSize Real))
                 (Vector (T (T VectorSize Real))))))
     (Element
        (Out
           (SampleRate Real
            -> T Real
            -> T Real
            -> T Real
            -> (T (T Real), Real)
            -> T (Vector (T VectorSize Real))
                 (Vector (T (T VectorSize Real))))))
-> IO
     (SampleRate Real
      -> T Real
      -> T Real
      -> T Real
      -> (T (T Real), Real)
      -> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real))))
forall a b. (a -> b) -> a -> b
$
         (InputArg (Control (T RealValue)) (Exp Real)
 -> InputArg (FrequencyControl Real) (Exp Real)
 -> InputArg (Control (T RealValue)) (Exp Real)
 -> InputArg (Modulation Real) (Exp Real)
 -> SampleRate (Exp Real)
 -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
-> SampleRate (Exp Real)
-> Unwrapped
     (InputArg (Control (T RealValue)) (Exp Real)
      -> InputArg (FrequencyControl Real) (Exp Real)
      -> InputArg (Control (T RealValue)) (Exp Real)
      -> InputArg (Modulation Real) (Exp Real)
      -> SampleRate (Exp Real)
      -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
forall a f. Wrapped a f => f -> SampleRate a -> Unwrapped f
wrapped ((InputArg (Control (T RealValue)) (Exp Real)
  -> InputArg (FrequencyControl Real) (Exp Real)
  -> InputArg (Control (T RealValue)) (Exp Real)
  -> InputArg (Modulation Real) (Exp Real)
  -> SampleRate (Exp Real)
  -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
 -> SampleRate (Exp Real)
 -> Unwrapped
      (InputArg (Control (T RealValue)) (Exp Real)
       -> InputArg (FrequencyControl Real) (Exp Real)
       -> InputArg (Control (T RealValue)) (Exp Real)
       -> InputArg (Modulation Real) (Exp Real)
       -> SampleRate (Exp Real)
       -> T (Serial VectorSize Real) (T (T (T VectorSize Real)))))
-> (InputArg (Control (T RealValue)) (Exp Real)
    -> InputArg (FrequencyControl Real) (Exp Real)
    -> InputArg (Control (T RealValue)) (Exp Real)
    -> InputArg (Modulation Real) (Exp Real)
    -> SampleRate (Exp Real)
    -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
-> SampleRate (Exp Real)
-> Unwrapped
     (InputArg (Control (T RealValue)) (Exp Real)
      -> InputArg (FrequencyControl Real) (Exp Real)
      -> InputArg (Control (T RealValue)) (Exp Real)
      -> InputArg (Modulation Real) (Exp Real)
      -> SampleRate (Exp Real)
      -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
forall a b. (a -> b) -> a -> b
$
           \(Control T (T RealValue)
phaserMix) (FrequencyControl T (T RealValue)
phaserFreq)
              (Control T (T RealValue)
reson) (Modulation T (T (T RealValue))
fm) SampleRate (Exp Real)
sr ->
           T (Serial VectorSize Real) -> T (T (T VectorSize Real))
forall a. T (T a) -> T (T a)
Stereo.multiValue (T (Serial VectorSize Real) -> T (T (T VectorSize Real)))
-> T (Serial VectorSize Real) (T (Serial VectorSize Real))
-> T (Serial VectorSize Real) (T (T (T VectorSize Real)))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$>
           (T (Serial VectorSize Real, T (Serial VectorSize Real))
  (T (Serial VectorSize Real))
forall a. PseudoRing a => T (a, T a) (T a)
Causal.envelopeStereo T (Serial VectorSize Real, T (Serial VectorSize Real))
  (T (Serial VectorSize Real))
-> SignalOf T (T (Serial VectorSize Real))
-> T (Serial VectorSize Real) (T (Serial VectorSize Real))
forall (process :: * -> * -> *) a b c.
C process =>
process (a, b) c -> SignalOf process b -> process a c
$>
              ((T ((RealValue,
    CascadeParameter (Pos Dec8 EndDesc) (MultiValuesOf (Exp Real))),
   Serial VectorSize Real)
  (Serial VectorSize Real)
-> T ((RealValue,
       CascadeParameter (Pos Dec8 EndDesc) (MultiValuesOf (Exp Real))),
      T (Serial VectorSize Real))
     (T (Serial 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 (CascadeParameter (Pos Dec8 EndDesc) (MultiValuesOf (Exp Real)),
   Serial VectorSize Real)
  (Serial VectorSize Real)
-> T (CascadeParameter
        (Pos Dec8 EndDesc) (MultiValuesOf (Exp Real)),
      Serial VectorSize Real)
     (Serial VectorSize Real)
-> T (Serial VectorSize Real,
      (CascadeParameter (Pos Dec8 EndDesc) (MultiValuesOf (Exp Real)),
       Serial VectorSize Real))
     (Serial VectorSize Real)
forall v a.
(PseudoRing v, IntegerConstant v) =>
T a v -> T a v -> T (v, a) v
fadeProcess (((CascadeParameter (Pos Dec8 EndDesc) (MultiValuesOf (Exp Real)),
  Serial VectorSize Real)
 -> Serial VectorSize Real)
-> T (CascadeParameter
        (Pos Dec8 EndDesc) (MultiValuesOf (Exp Real)),
      Serial VectorSize Real)
     (Serial VectorSize Real)
forall b c. (b -> c) -> T b c
forall (a :: * -> * -> *) b c. Arrow a => (b -> c) -> a b c
arr (CascadeParameter (Pos Dec8 EndDesc) (MultiValuesOf (Exp Real)),
 Serial VectorSize Real)
-> Serial VectorSize Real
forall a b. (a, b) -> b
snd) T (CascadeParameter (Pos Dec8 EndDesc) (MultiValuesOf (Exp Real)),
   Serial VectorSize Real)
  (Serial VectorSize Real)
forall parameter a b. C parameter a b => T (parameter, a) b
CtrlPS.process
                    T (Serial VectorSize Real,
   (CascadeParameter (Pos Dec8 EndDesc) (MultiValuesOf (Exp Real)),
    Serial VectorSize Real))
  (Serial VectorSize Real)
-> T ((RealValue,
       CascadeParameter (Pos Dec8 EndDesc) (MultiValuesOf (Exp Real))),
      Serial VectorSize Real)
     (Serial VectorSize Real,
      (CascadeParameter (Pos Dec8 EndDesc) (MultiValuesOf (Exp Real)),
       Serial VectorSize Real))
-> T ((RealValue,
       CascadeParameter (Pos Dec8 EndDesc) (MultiValuesOf (Exp Real))),
      Serial VectorSize Real)
     (Serial VectorSize Real)
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
<<<
                    T RealValue (Serial VectorSize Real)
-> T (RealValue,
      (CascadeParameter (Pos Dec8 EndDesc) (MultiValuesOf (Exp Real)),
       Serial VectorSize Real))
     (Serial VectorSize Real,
      (CascadeParameter (Pos Dec8 EndDesc) (MultiValuesOf (Exp Real)),
       Serial 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 ((Exp Real -> Exp (T VectorSize Real))
-> T RealValue (Serial 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 (RealValue,
   (CascadeParameter (Pos Dec8 EndDesc) (MultiValuesOf (Exp Real)),
    Serial VectorSize Real))
  (Serial VectorSize Real,
   (CascadeParameter (Pos Dec8 EndDesc) (MultiValuesOf (Exp Real)),
    Serial VectorSize Real))
-> (((RealValue,
      CascadeParameter (Pos Dec8 EndDesc) (MultiValuesOf (Exp Real))),
     Serial VectorSize Real)
    -> (RealValue,
        (CascadeParameter (Pos Dec8 EndDesc) (MultiValuesOf (Exp Real)),
         Serial VectorSize Real)))
-> T ((RealValue,
       CascadeParameter (Pos Dec8 EndDesc) (MultiValuesOf (Exp Real))),
      Serial VectorSize Real)
     (Serial VectorSize Real,
      (CascadeParameter (Pos Dec8 EndDesc) (MultiValuesOf (Exp Real)),
       Serial VectorSize Real))
forall (a :: * -> * -> *) c d b.
Arrow a =>
a c d -> (b -> c) -> a b d
<<^
                    (\((RealValue
k,CascadeParameter (Pos Dec8 EndDesc) (MultiValuesOf (Exp Real))
p),Serial VectorSize Real
x) -> (RealValue
k,(CascadeParameter (Pos Dec8 EndDesc) (MultiValuesOf (Exp Real))
p,Serial VectorSize Real
x))))
                  T ((RealValue,
    CascadeParameter (Pos Dec8 EndDesc) (MultiValuesOf (Exp Real))),
   T (Serial VectorSize Real))
  (T (Serial VectorSize Real))
-> SignalOf
     T
     (RealValue,
      CascadeParameter (Pos Dec8 EndDesc) (MultiValuesOf (Exp Real)))
-> T (T (Serial VectorSize Real)) (T (Serial VectorSize Real))
forall (process :: * -> * -> *) a b c.
C process =>
process (a, b) c -> SignalOf process a -> process b c
$< (RealValue
 -> CascadeParameter (Pos Dec8 EndDesc) (MultiValuesOf (Exp Real))
 -> (RealValue,
     CascadeParameter (Pos Dec8 EndDesc) (MultiValuesOf (Exp Real))))
-> T RealValue
-> T (CascadeParameter
        (Pos Dec8 EndDesc) (MultiValuesOf (Exp Real)))
-> T (RealValue,
      CascadeParameter (Pos Dec8 EndDesc) (MultiValuesOf (Exp Real)))
forall a b c. (a -> b -> c) -> T a -> T b -> T c
forall (f :: * -> *) a b c.
Applicative f =>
(a -> b -> c) -> f a -> f b -> f c
liftA2 (,)
                        (T (T RealValue) -> T RealValue
forall a. C a => T (T a) -> T a
piecewiseConstant T (T RealValue)
phaserMix)
                        (T (T (CascadeParameter
        (Pos Dec8 EndDesc) (MultiValuesOf (Exp Real))))
-> T (CascadeParameter
        (Pos Dec8 EndDesc) (MultiValuesOf (Exp Real)))
forall a. C a => T (T a) -> T a
piecewiseConstant
                           ((Exp Real -> CascadeParameter (Pos Dec8 EndDesc) (Exp Real))
-> T (T RealValue)
     (T (CascadeParameter
           (Pos Dec8 EndDesc) (MultiValuesOf (Exp Real))))
forall a am b bm.
(Aggregate a am, Aggregate b bm) =>
(a -> b) -> T (T am) (T bm)
Const.causalMap
                              (Proxy (Pos Dec8 EndDesc)
-> Exp Real -> CascadeParameter (Pos Dec8 EndDesc) (Exp Real)
forall a n.
(C a, Natural n) =>
Proxy n -> a -> CascadeParameter n a
Allpass.flangerParameter Proxy (Pos Dec8 EndDesc)
TypeNum.d8)
                                 T (T RealValue)
  (T (CascadeParameter
        (Pos Dec8 EndDesc) (MultiValuesOf (Exp Real))))
-> SignalOf T (T RealValue)
-> SignalOf
     T
     (T (CascadeParameter
           (Pos Dec8 EndDesc) (MultiValuesOf (Exp Real))))
forall (process :: * -> * -> *) a b.
C process =>
process a b -> SignalOf process a -> SignalOf process b
$* SignalOf T (T RealValue)
T (T RealValue)
phaserFreq)))
               T (T (Serial VectorSize Real)) (T (Serial VectorSize Real))
-> SignalOf T (T (Serial VectorSize Real))
-> SignalOf T (T (Serial VectorSize Real))
forall (process :: * -> * -> *) a b.
C process =>
process a b -> SignalOf process a -> SignalOf process b
$*
               T (T RealValue)
-> T (T (T RealValue))
-> SampleRate (Exp Real)
-> T (T (Serial VectorSize Real))
windCore T (T RealValue)
reson T (T (T RealValue))
fm SampleRate (Exp Real)
sr)))
      IO
  (Real
   -> SampleRate Real
   -> Real
   -> LazyTime
   -> Vector (T VectorSize Real))
softStringReleaseEnvelope


filterSawStereoFM ::
   IO (Real -> Real ->
       PC.T Real ->
       Real -> Real ->
       SigSt.ChunkSize ->
       PC.T (BM.T Real) ->
       Instrument Real (Stereo.T Vector))
filterSawStereoFM :: IO
  (Real
   -> Real
   -> T Real
   -> Real
   -> Real
   -> ChunkSize
   -> T (T Real)
   -> Instrument Real (T (T VectorSize Real)))
filterSawStereoFM =
   ((SampleRate Real
  -> Real
  -> Real
  -> (T Real, T (T Real), Real)
  -> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real))))
 -> (Real
     -> Real
     -> ChunkSize
     -> SampleRate Real
     -> Real
     -> LazyTime
     -> Vector (T VectorSize Real))
 -> Real
 -> Real
 -> T Real
 -> Real
 -> Real
 -> ChunkSize
 -> T (T Real)
 -> Instrument Real (T (T VectorSize Real)))
-> IO
     (SampleRate Real
      -> Real
      -> Real
      -> (T Real, T (T Real), Real)
      -> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real))))
-> IO
     (Real
      -> Real
      -> ChunkSize
      -> SampleRate Real
      -> Real
      -> LazyTime
      -> Vector (T VectorSize Real))
-> IO
     (Real
      -> Real
      -> T Real
      -> Real
      -> Real
      -> ChunkSize
      -> T (T Real)
      -> Instrument Real (T (T VectorSize Real)))
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 Real, T (T Real), Real)
-> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real)))
osc Real
-> Real
-> ChunkSize
-> SampleRate Real
-> Real
-> LazyTime
-> Vector (T VectorSize Real)
env Real
dec Real
rel T Real
detune Real
bright Real
brightDecay ChunkSize
vcsize T (T Real)
fm SampleRate Real
sr Real
vel Real
freq LazyTime
dur ->
         T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real)))
-> Vector (T VectorSize Real) -> T (T (T VectorSize Real))
forall a b.
(Storable a, Storable b) =>
T (Vector a) (Vector b) -> Vector a -> Vector b
pioApply
            (SampleRate Real
-> Real
-> Real
-> (T Real, T (T Real), Real)
-> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real)))
osc SampleRate Real
sr Real
bright Real
brightDecay (T Real
detune, T (T Real)
fm, Real
freq))
            (Real
-> Real
-> ChunkSize
-> SampleRate Real
-> Real
-> LazyTime
-> Vector (T VectorSize Real)
env Real
dec Real
rel ChunkSize
vcsize SampleRate Real
sr Real
vel LazyTime
dur))
      (DSL
  (SampleRate Real
   -> Real
   -> Real
   -> (T Real, T (T Real), Real)
   -> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real))))
  (Element
     (In
        (SampleRate Real
         -> Real
         -> Real
         -> (T Real, T (T Real), Real)
         -> T (Vector (T VectorSize Real))
              (Vector (T (T VectorSize Real))))))
  (Element
     (Out
        (SampleRate Real
         -> Real
         -> Real
         -> (T Real, T (T Real), Real)
         -> T (Vector (T VectorSize Real))
              (Vector (T (T VectorSize Real))))))
-> IO
     (SampleRate Real
      -> Real
      -> Real
      -> (T Real, T (T Real), Real)
      -> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real))))
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 Real, T (T Real), Real)
    -> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real))))
   (Element
      (In
         (SampleRate Real
          -> Real
          -> Real
          -> (T Real, T (T Real), Real)
          -> T (Vector (T VectorSize Real))
               (Vector (T (T VectorSize Real))))))
   (Element
      (Out
         (SampleRate Real
          -> Real
          -> Real
          -> (T Real, T (T Real), Real)
          -> T (Vector (T VectorSize Real))
               (Vector (T (T VectorSize Real))))))
 -> IO
      (SampleRate Real
       -> Real
       -> Real
       -> (T Real, T (T Real), Real)
       -> T (Vector (T VectorSize Real))
            (Vector (T (T VectorSize Real)))))
-> DSL
     (SampleRate Real
      -> Real
      -> Real
      -> (T Real, T (T Real), Real)
      -> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real))))
     (Element
        (In
           (SampleRate Real
            -> Real
            -> Real
            -> (T Real, T (T Real), Real)
            -> T (Vector (T VectorSize Real))
                 (Vector (T (T VectorSize Real))))))
     (Element
        (Out
           (SampleRate Real
            -> Real
            -> Real
            -> (T Real, T (T Real), Real)
            -> T (Vector (T VectorSize Real))
                 (Vector (T (T VectorSize Real))))))
-> IO
     (SampleRate Real
      -> Real
      -> Real
      -> (T Real, T (T Real), Real)
      -> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real))))
forall a b. (a -> b) -> a -> b
$
       (Arg Frequency (Exp Real)
 -> Arg Time (Exp Real)
 -> InputArg (DetuneModulation Real) (Exp Real)
 -> SampleRate (Exp Real)
 -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
-> SampleRate (Exp Real)
-> Unwrapped
     (Arg Frequency (Exp Real)
      -> Arg Time (Exp Real)
      -> InputArg (DetuneModulation Real) (Exp Real)
      -> SampleRate (Exp Real)
      -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
forall a f. Wrapped a f => f -> SampleRate a -> Unwrapped f
wrapped ((Arg Frequency (Exp Real)
  -> Arg Time (Exp Real)
  -> InputArg (DetuneModulation Real) (Exp Real)
  -> SampleRate (Exp Real)
  -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
 -> SampleRate (Exp Real)
 -> Unwrapped
      (Arg Frequency (Exp Real)
       -> Arg Time (Exp Real)
       -> InputArg (DetuneModulation Real) (Exp Real)
       -> SampleRate (Exp Real)
       -> T (Serial VectorSize Real) (T (T (T VectorSize Real)))))
-> (Arg Frequency (Exp Real)
    -> Arg Time (Exp Real)
    -> InputArg (DetuneModulation Real) (Exp Real)
    -> SampleRate (Exp Real)
    -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
-> SampleRate (Exp Real)
-> Unwrapped
     (Arg Frequency (Exp Real)
      -> Arg Time (Exp Real)
      -> InputArg (DetuneModulation Real) (Exp Real)
      -> SampleRate (Exp Real)
      -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
forall a b. (a -> b) -> a -> b
$ \(Frequency Exp Real
bright) (Time Exp Real
brightDec) (DetuneModulation (T (T RealValue), T (T (T RealValue)))
fm) ->
       (SampleRate (Exp Real) -> Exp Real -> Exp Real)
-> Exp Real
-> (Exp Real
    -> SampleRate (Exp Real)
    -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
-> SampleRate (Exp Real)
-> T (Serial VectorSize 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 (Serial VectorSize Real) (T (T (T VectorSize Real))))
 -> SampleRate (Exp Real)
 -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
-> (Exp Real
    -> SampleRate (Exp Real)
    -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
-> SampleRate (Exp Real)
-> T (Serial VectorSize 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 (Serial VectorSize Real) (T (T (T VectorSize Real))))
-> SampleRate (Exp Real)
-> T (Serial VectorSize 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 (Serial VectorSize Real) (T (T (T VectorSize Real))))
 -> SampleRate (Exp Real)
 -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
-> (Exp Real
    -> SampleRate (Exp Real)
    -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
-> SampleRate (Exp Real)
-> T (Serial VectorSize Real) (T (T (T VectorSize Real)))
forall a b. (a -> b) -> a -> b
$ \Exp Real
cutoff SampleRate (Exp Real)
_sr ->
         (T (Serial VectorSize Real) -> T (T (T VectorSize Real))
forall a. T (T a) -> T (T a)
Stereo.multiValue (T (Serial VectorSize Real) -> T (T (T VectorSize Real)))
-> T (Serial VectorSize Real, T (Serial VectorSize Real))
     (T (Serial VectorSize Real))
-> T (Serial VectorSize Real, T (Serial VectorSize Real))
     (T (T (T VectorSize Real)))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$>
              T (Serial VectorSize Real, T (Serial VectorSize Real))
  (T (Serial VectorSize Real))
forall a. PseudoRing a => T (a, T a) (T a)
Causal.envelopeStereo T (Serial VectorSize Real, T (Serial VectorSize Real))
  (T (T (T VectorSize Real)))
-> SignalOf T (T (Serial VectorSize Real))
-> T (Serial VectorSize Real) (T (T (T VectorSize Real)))
forall (process :: * -> * -> *) a b c.
C process =>
process (a, b) c -> SignalOf process b -> process a c
$>
              (T (Serial VectorSize Real) (Serial VectorSize Real)
-> T (T (Serial VectorSize Real)) (T (Serial VectorSize Real))
forall a b.
(Phi a, Undefined a, Phi b, Undefined b) =>
T a b -> T (T a) (T b)
Causal.stereoFromMono
                  (Result (Serial VectorSize Real) -> Serial VectorSize Real
forall a. Result a -> a
UniFilter.lowpass
                   (Result (Serial VectorSize Real) -> Serial VectorSize Real)
-> T (Serial VectorSize Real, Serial VectorSize Real)
     (Result (Serial VectorSize Real))
-> T (Serial VectorSize Real, Serial VectorSize Real)
     (Serial VectorSize Real)
forall (a :: * -> * -> *) c d b.
Arrow a =>
(c -> d) -> a b c -> a b d
^<<
                   Exp Real
-> (Exp Real -> T (Parameter (MultiValuesOf (Exp Real))))
-> T (Serial VectorSize Real) (Result (Serial VectorSize Real))
forall parameter av bv n r.
(C parameter av bv, C parameter, Read av, n ~ Size av, Write bv,
 n ~ Size bv, C r, RationalConstant r, Field r, Comparison r) =>
Exp r -> (Exp r -> T parameter) -> T av bv
CtrlPS.processCtrlRate Exp Real
100
                      (\Exp Real
k ->
                        (Exp Real -> Parameter (Exp Real))
-> T RealValue (Parameter (MultiValuesOf (Exp 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
UniFilterL.parameter Exp Real
10) T RealValue (Parameter (MultiValuesOf (Exp Real)))
-> SignalOf T RealValue
-> SignalOf T (Parameter (MultiValuesOf (Exp Real)))
forall (process :: * -> * -> *) a b.
C process =>
process a b -> SignalOf process a -> SignalOf process b
$*
                           {- bound control in order to avoid too low resonant frequency,
                              which makes the filter instable -}
                           Exp Real -> Exp Real -> Exp Real -> T RealValue
forall a.
(C a, Real a, RationalConstant a, Transcendental a) =>
Exp a -> Exp a -> Exp a -> MV a
Sig.exponentialBounded2
                              Exp Real
cutoff (Exp Real
brightDecExp Real -> Exp Real -> Exp Real
forall a. Fractional a => a -> a -> a
/Exp Real
k) Exp Real
bright)
                   T (Serial VectorSize Real) (Result (Serial VectorSize Real))
-> T (Serial VectorSize Real, Serial VectorSize Real)
     (Serial VectorSize Real)
-> T (Serial VectorSize Real, Serial VectorSize Real)
     (Result (Serial VectorSize Real))
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
<<<
                   (forall r.
 Serial VectorSize Real
 -> CodeGenFunction r (Serial VectorSize Real))
-> T (Serial VectorSize Real, Serial VectorSize Real)
     (Serial 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 Serial VectorSize Real
-> CodeGenFunction r (Serial VectorSize Real)
forall r.
Serial VectorSize Real
-> CodeGenFunction r (Serial VectorSize Real)
forall a r.
(PseudoRing a, IntegerConstant a) =>
a -> CodeGenFunction r a
WaveL.saw T (Serial VectorSize Real, Serial VectorSize Real)
  (Serial VectorSize Real)
-> SignalOf T (Serial VectorSize Real)
-> T (Serial VectorSize Real) (Serial VectorSize Real)
forall (process :: * -> * -> *) a b c.
C process =>
process (a, b) c -> SignalOf process a -> process b c
$< SignalOf T (Serial VectorSize Real)
T (Serial VectorSize Real)
forall a. C a => a
zero)
               T (T (Serial VectorSize Real)) (T (Serial VectorSize Real))
-> SignalOf T (T (Serial VectorSize Real))
-> SignalOf T (T (Serial VectorSize Real))
forall (process :: * -> * -> *) a b.
C process =>
process a b -> SignalOf process a -> SignalOf process b
$* Exp Real
-> (T (T RealValue), T (T (T RealValue)))
-> T (T (Serial VectorSize Real))
stereoFrequenciesFromDetuneBendModulation Exp Real
speed (T (T RealValue), T (T (T RealValue)))
fm)))
      IO
  (Real
   -> Real
   -> ChunkSize
   -> SampleRate Real
   -> Real
   -> LazyTime
   -> Vector (T VectorSize Real))
pingReleaseEnvelope


{- |
The ADSR curve is composed from three parts:
Attack, Decay(+Sustain), Release.
Attack starts when the key is pressed
and lasts attackTime seconds
where it reaches height attackPeak*amplitudeOfVelocity.
It should be attackPeak>1 because in the following phase
we want to approach 1 from above.
Say the curve would approach the limit value L
if it would continue after the end of the attack phase,
the slope is determined by the halfLife with respect to this upper bound.
That is, attackHalfLife is the time in seconds where the attack curve
reaches or would reach L/2.
After Attack the Decay part starts at the same level
and decays to amplitudeOfVelocity.
The slope is again a halfLife,
that is, decayHalfLife is the time where the curve
drops from attackPeak*amplitudeOfVelocity to (attackPeak+1)/2*amplitudeOfVelocity.
This phase lasts as long as the key is pressed.
If the key is released the curve decays with half life releaseHalfLife.
-}
{-
1 - 2^(-attackTime/attackHalfLife) = peak
-}
adsr ::
   IO (Real -> Real -> Real ->
       Real -> Real ->
       SigSt.ChunkSize ->
       SampleRate Real -> Real -> Ev.LazyTime -> SigSt.T Vector)
adsr :: IO
  (Real
   -> Real
   -> Real
   -> Real
   -> Real
   -> ChunkSize
   -> SampleRate Real
   -> Real
   -> LazyTime
   -> Vector (T VectorSize Real))
adsr =
   ((SampleRate Real
  -> Real -> Real -> T LazySize (Vector (T VectorSize Real)))
 -> (SampleRate Real
     -> Real -> Real -> Real -> T LazySize (Vector (T VectorSize Real)))
 -> (ChunkSize
     -> SampleRate Real -> Real -> Real -> Vector (T VectorSize Real))
 -> Real
 -> Real
 -> Real
 -> Real
 -> Real
 -> ChunkSize
 -> SampleRate Real
 -> Real
 -> LazyTime
 -> Vector (T VectorSize Real))
-> IO
     (SampleRate Real
      -> Real -> Real -> T LazySize (Vector (T VectorSize Real)))
-> IO
     (SampleRate Real
      -> Real -> Real -> Real -> T LazySize (Vector (T VectorSize Real)))
-> IO
     (ChunkSize
      -> SampleRate Real -> Real -> Real -> Vector (T VectorSize Real))
-> IO
     (Real
      -> Real
      -> Real
      -> Real
      -> Real
      -> ChunkSize
      -> SampleRate Real
      -> Real
      -> LazyTime
      -> Vector (T VectorSize Real))
forall (f :: * -> *) a b c d.
Applicative f =>
(a -> b -> c -> d) -> f a -> f b -> f c -> f d
liftA3
      (\SampleRate Real
-> Real -> Real -> T LazySize (Vector (T VectorSize Real))
attack SampleRate Real
-> Real -> Real -> Real -> T LazySize (Vector (T VectorSize Real))
decay ChunkSize
-> SampleRate Real -> Real -> Real -> Vector (T VectorSize Real)
release
           Real
attackTime Real
attackPeak Real
attackHalfLife
           Real
decayHalfLife Real
releaseHalfLife ChunkSize
vcsize SampleRate Real
sr Real
vel LazyTime
dur ->
         let amp :: Real
amp = Real -> Real
forall a. C a => a -> a
amplitudeFromVelocity Real
vel
             (LazyTime
attackDur, LazyTime
decayDur) =
                Int -> LazyTime -> (LazyTime, LazyTime)
forall sig. Transform sig => Int -> sig -> (sig, sig)
CutG.splitAt (Real -> Int
forall b. C b => Real -> b
forall a b. (C a, C b) => a -> b
round (Real
attackTime Real -> Real -> Real
forall a. C a => a -> a -> a
* SampleRate Real -> Real
forall a. C a => SampleRate a -> a
vectorRate SampleRate Real
sr)) LazyTime
dur
         in Vector (T VectorSize Real)
-> (Real -> Vector (T VectorSize Real))
-> Vector (T VectorSize Real)
forall n a.
(Positive n, Vector a) =>
Vector (T n a) -> (a -> Vector (T n a)) -> Vector (T n a)
SigStL.continuePacked
               (T LazySize (Vector (T VectorSize Real))
-> LazyTime -> Vector (T VectorSize Real)
forall b.
Storable b =>
T LazySize (Vector b) -> LazyTime -> Vector b
pioApplyToLazyTime
                  (SampleRate Real
-> Real -> Real -> T LazySize (Vector (T VectorSize Real))
attack SampleRate Real
sr
                     Real
attackHalfLife
                     (Real
attackPeak Real -> Real -> Real
forall a. C a => a -> a -> a
* Real
amp Real -> Real -> Real
forall a. Fractional a => a -> a -> a
/ (Real
1 Real -> Real -> Real
forall a. C a => a -> a -> a
- Real
2Real -> Real -> Real
forall a. C a => a -> a -> a
^?(-Real
attackTimeReal -> Real -> Real
forall a. Fractional a => a -> a -> a
/Real
attackHalfLife))))
                  LazyTime
attackDur
                Vector (T VectorSize Real)
-> Vector (T VectorSize Real) -> Vector (T VectorSize Real)
forall a. Semigroup a => a -> a -> a
<>
                T LazySize (Vector (T VectorSize Real))
-> LazyTime -> Vector (T VectorSize Real)
forall b.
Storable b =>
T LazySize (Vector b) -> LazyTime -> Vector b
pioApplyToLazyTime
                  (SampleRate Real
-> Real -> Real -> Real -> T LazySize (Vector (T VectorSize Real))
decay SampleRate Real
sr
                     Real
decayHalfLife
                     ((Real
attackPeakReal -> Real -> Real
forall a. C a => a -> a -> a
-Real
1)Real -> Real -> Real
forall a. C a => a -> a -> a
*Real
amp)
                     Real
amp)
                  LazyTime
decayDur)
               (\Real
x -> ChunkSize
-> SampleRate Real -> Real -> Real -> Vector (T VectorSize Real)
release ChunkSize
vcsize SampleRate Real
sr Real
releaseHalfLife Real
x))
      (DSL
  (SampleRate Real
   -> Real -> Real -> T LazySize (Vector (T VectorSize Real)))
  (Element
     (In
        (SampleRate Real
         -> Real -> Real -> T LazySize (Vector (T VectorSize Real)))))
  (Element
     (Out
        (SampleRate Real
         -> Real -> Real -> T LazySize (Vector (T VectorSize Real)))))
-> IO
     (SampleRate Real
      -> Real -> Real -> T LazySize (Vector (T VectorSize Real)))
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 (Vector (T VectorSize Real)))
   (Element
      (In
         (SampleRate Real
          -> Real -> Real -> T LazySize (Vector (T VectorSize Real)))))
   (Element
      (Out
         (SampleRate Real
          -> Real -> Real -> T LazySize (Vector (T VectorSize Real)))))
 -> IO
      (SampleRate Real
       -> Real -> Real -> T LazySize (Vector (T VectorSize Real))))
-> DSL
     (SampleRate Real
      -> Real -> Real -> T LazySize (Vector (T VectorSize Real)))
     (Element
        (In
           (SampleRate Real
            -> Real -> Real -> T LazySize (Vector (T VectorSize Real)))))
     (Element
        (Out
           (SampleRate Real
            -> Real -> Real -> T LazySize (Vector (T VectorSize Real)))))
-> IO
     (SampleRate Real
      -> Real -> Real -> T LazySize (Vector (T VectorSize Real)))
forall a b. (a -> b) -> a -> b
$
       (Arg Time (Exp Real)
 -> Arg Number (Exp Real)
 -> SampleRate (Exp Real)
 -> T () (Serial VectorSize Real))
-> SampleRate (Exp Real)
-> Unwrapped
     (Arg Time (Exp Real)
      -> Arg Number (Exp Real)
      -> SampleRate (Exp Real)
      -> T () (Serial 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 () (Serial VectorSize Real))
 -> SampleRate (Exp Real)
 -> Unwrapped
      (Arg Time (Exp Real)
       -> Arg Number (Exp Real)
       -> SampleRate (Exp Real)
       -> T () (Serial VectorSize Real)))
-> (Arg Time (Exp Real)
    -> Arg Number (Exp Real)
    -> SampleRate (Exp Real)
    -> T () (Serial VectorSize Real))
-> SampleRate (Exp Real)
-> Unwrapped
     (Arg Time (Exp Real)
      -> Arg Number (Exp Real)
      -> SampleRate (Exp Real)
      -> T () (Serial VectorSize Real))
forall a b. (a -> b) -> a -> b
$ \(Time Exp Real
halfLife) (Number Exp Real
amplitude) (SampleRate Exp Real
_sr) ->
         SignalOf T (Serial VectorSize Real)
-> T () (Serial 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 (Serial VectorSize Real)
 -> T () (Serial VectorSize Real))
-> SignalOf T (Serial VectorSize Real)
-> T () (Serial VectorSize Real)
forall a b. (a -> b) -> a -> b
$
         Exp Real -> T (Serial VectorSize Real)
forall n a. Vector n a => Exp a -> T (Serial n a)
SigPS.constant Exp Real
amplitude T (Serial VectorSize Real)
-> T (Serial VectorSize Real) -> T (Serial VectorSize Real)
forall a. C a => a -> a -> a
- Exp Real -> Exp Real -> T (Serial 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
amplitude)
      (DSL
  (SampleRate Real
   -> Real -> Real -> Real -> T LazySize (Vector (T VectorSize Real)))
  (Element
     (In
        (SampleRate Real
         -> Real
         -> Real
         -> Real
         -> T LazySize (Vector (T VectorSize Real)))))
  (Element
     (Out
        (SampleRate Real
         -> Real
         -> Real
         -> Real
         -> T LazySize (Vector (T VectorSize Real)))))
-> IO
     (SampleRate Real
      -> Real -> Real -> Real -> T LazySize (Vector (T VectorSize Real)))
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 LazySize (Vector (T VectorSize Real)))
   (Element
      (In
         (SampleRate Real
          -> Real
          -> Real
          -> Real
          -> T LazySize (Vector (T VectorSize Real)))))
   (Element
      (Out
         (SampleRate Real
          -> Real
          -> Real
          -> Real
          -> T LazySize (Vector (T VectorSize Real)))))
 -> IO
      (SampleRate Real
       -> Real
       -> Real
       -> Real
       -> T LazySize (Vector (T VectorSize Real))))
-> DSL
     (SampleRate Real
      -> Real -> Real -> Real -> T LazySize (Vector (T VectorSize Real)))
     (Element
        (In
           (SampleRate Real
            -> Real
            -> Real
            -> Real
            -> T LazySize (Vector (T VectorSize Real)))))
     (Element
        (Out
           (SampleRate Real
            -> Real
            -> Real
            -> Real
            -> T LazySize (Vector (T VectorSize Real)))))
-> IO
     (SampleRate Real
      -> Real -> Real -> Real -> T LazySize (Vector (T VectorSize Real)))
forall a b. (a -> b) -> a -> b
$ (Arg Time (Exp Real)
 -> Arg Number (Exp Real)
 -> Arg Number (Exp Real)
 -> SampleRate (Exp Real)
 -> T () (Serial VectorSize Real))
-> SampleRate (Exp Real)
-> Unwrapped
     (Arg Time (Exp Real)
      -> Arg Number (Exp Real)
      -> Arg Number (Exp Real)
      -> SampleRate (Exp Real)
      -> T () (Serial VectorSize Real))
forall a f. Wrapped a f => f -> SampleRate a -> Unwrapped f
wrapped ((Arg Time (Exp Real)
  -> Arg Number (Exp Real)
  -> Arg Number (Exp Real)
  -> SampleRate (Exp Real)
  -> T () (Serial VectorSize Real))
 -> SampleRate (Exp Real)
 -> Unwrapped
      (Arg Time (Exp Real)
       -> Arg Number (Exp Real)
       -> Arg Number (Exp Real)
       -> SampleRate (Exp Real)
       -> T () (Serial VectorSize Real)))
-> (Arg Time (Exp Real)
    -> Arg Number (Exp Real)
    -> Arg Number (Exp Real)
    -> SampleRate (Exp Real)
    -> T () (Serial VectorSize Real))
-> SampleRate (Exp Real)
-> Unwrapped
     (Arg Time (Exp Real)
      -> Arg Number (Exp Real)
      -> Arg Number (Exp Real)
      -> SampleRate (Exp Real)
      -> T () (Serial VectorSize Real))
forall a b. (a -> b) -> a -> b
$
         \(Time Exp Real
halfLife) (Number Exp Real
amplitude) (Number Exp Real
saturation)
            (SampleRate Exp Real
_sr) ->
         SignalOf T (Serial VectorSize Real)
-> T () (Serial 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 (Serial VectorSize Real)
 -> T () (Serial VectorSize Real))
-> SignalOf T (Serial VectorSize Real)
-> T () (Serial VectorSize Real)
forall a b. (a -> b) -> a -> b
$
         Exp Real -> T (Serial VectorSize Real)
forall n a. Vector n a => Exp a -> T (Serial n a)
SigPS.constant Exp Real
saturation T (Serial VectorSize Real)
-> T (Serial VectorSize Real) -> T (Serial VectorSize Real)
forall a. C a => a -> a -> a
+ Exp Real -> Exp Real -> T (Serial 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
amplitude)
      (DSL (SampleRate Real -> Real -> Real -> Vector (T VectorSize Real))
-> IO
     (Shape
        (SampleRate Real -> Real -> Real -> Vector (T VectorSize Real))
      -> SampleRate Real -> Real -> Real -> Vector (T VectorSize Real))
forall f. Run f => DSL f -> IO (Shape f -> f)
Render.run (DSL
   (SampleRate Real -> Real -> Real -> Vector (T VectorSize Real))
 -> IO
      (Shape
         (SampleRate Real -> Real -> Real -> Vector (T VectorSize Real))
       -> SampleRate Real -> Real -> Real -> Vector (T VectorSize Real)))
-> DSL
     (SampleRate Real -> Real -> Real -> Vector (T VectorSize Real))
-> IO
     (Shape
        (SampleRate Real -> Real -> Real -> Vector (T VectorSize Real))
      -> SampleRate Real -> Real -> Real -> Vector (T VectorSize Real))
forall a b. (a -> b) -> a -> b
$
       (Arg Time (Exp Real)
 -> Arg Number (Exp Real)
 -> SampleRate (Exp Real)
 -> T (Serial VectorSize Real))
-> SampleRate (Exp Real)
-> Unwrapped
     (Arg Time (Exp Real)
      -> Arg Number (Exp Real)
      -> SampleRate (Exp Real)
      -> T (Serial 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 (Serial VectorSize Real))
 -> SampleRate (Exp Real)
 -> Unwrapped
      (Arg Time (Exp Real)
       -> Arg Number (Exp Real)
       -> SampleRate (Exp Real)
       -> T (Serial VectorSize Real)))
-> (Arg Time (Exp Real)
    -> Arg Number (Exp Real)
    -> SampleRate (Exp Real)
    -> T (Serial VectorSize Real))
-> SampleRate (Exp Real)
-> Unwrapped
     (Arg Time (Exp Real)
      -> Arg Number (Exp Real)
      -> SampleRate (Exp Real)
      -> T (Serial VectorSize Real))
forall a b. (a -> b) -> a -> b
$ \(Time Exp Real
releaseHL) (Number Exp Real
amplitude) (SampleRate Exp Real
_sr) ->
       let releaseTime :: Exp Real
releaseTime = Exp Real
releaseHL Exp Real -> Exp Real -> Exp Real
forall a. C a => a -> a -> a
* Exp Real
5 Exp Real -> Exp Real -> Exp Real
forall a. Fractional a => a -> a -> a
/ Int -> Exp Real
forall a b. (Integral a, Num b) => a -> b
fromIntegral Int
vectorSize
       in Exp Word -> T (Serial VectorSize Real) (Serial 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
releaseTime) T (Serial VectorSize Real) (Serial VectorSize Real)
-> SignalOf T (Serial VectorSize Real)
-> SignalOf T (Serial VectorSize Real)
forall (process :: * -> * -> *) a b.
C process =>
process a b -> SignalOf process a -> SignalOf process b
$*
          Exp Real -> Exp Real -> T (Serial 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
amplitude)

brass ::
   IO (Real -> Real ->
       Real -> Real -> Real -> Real ->
       PC.T Real ->
       PC.T Real ->
       SigSt.ChunkSize ->
       PC.T (BM.T Real) ->
       Instrument Real (Stereo.T Vector))
brass :: IO
  (Real
   -> Real
   -> Real
   -> Real
   -> Real
   -> Real
   -> T Real
   -> T Real
   -> ChunkSize
   -> T (T Real)
   -> Instrument Real (T (T VectorSize Real)))
brass =
   ((SampleRate Real
  -> T Real
  -> T Real
  -> (T (T Real), Real)
  -> Vector (T VectorSize Real)
  -> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real))))
 -> (Real
     -> Real
     -> Real
     -> Real
     -> Real
     -> ChunkSize
     -> SampleRate Real
     -> Real
     -> LazyTime
     -> Vector (T VectorSize Real))
 -> Real
 -> Real
 -> Real
 -> Real
 -> Real
 -> Real
 -> T Real
 -> T Real
 -> ChunkSize
 -> T (T Real)
 -> Instrument Real (T (T VectorSize Real)))
-> IO
     (SampleRate Real
      -> T Real
      -> T Real
      -> (T (T Real), Real)
      -> Vector (T VectorSize Real)
      -> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real))))
-> IO
     (Real
      -> Real
      -> Real
      -> Real
      -> Real
      -> ChunkSize
      -> SampleRate Real
      -> Real
      -> LazyTime
      -> Vector (T VectorSize Real))
-> IO
     (Real
      -> Real
      -> Real
      -> Real
      -> Real
      -> Real
      -> T Real
      -> T Real
      -> ChunkSize
      -> T (T Real)
      -> Instrument Real (T (T VectorSize Real)))
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 Real
-> T Real
-> (T (T Real), Real)
-> Vector (T VectorSize Real)
-> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real)))
osc Real
-> Real
-> Real
-> Real
-> Real
-> ChunkSize
-> SampleRate Real
-> Real
-> LazyTime
-> Vector (T VectorSize Real)
env Real
attTime Real
attPeak Real
attHL
            Real
dec Real
rel Real
emph T Real
det T Real
dist ChunkSize
vcsize T (T Real)
fm SampleRate Real
sr Real
vel Real
freq LazyTime
dur ->
         T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real)))
-> Vector (T VectorSize Real) -> T (T (T VectorSize Real))
forall a b.
(Storable a, Storable b) =>
T (Vector a) (Vector b) -> Vector a -> Vector b
pioApply
            (SampleRate Real
-> T Real
-> T Real
-> (T (T Real), Real)
-> Vector (T VectorSize Real)
-> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real)))
osc SampleRate Real
sr T Real
det T Real
dist (T (T Real)
fm, Real
freq)
               (Real
-> Real
-> Real
-> Real
-> Real
-> ChunkSize
-> SampleRate Real
-> Real
-> LazyTime
-> Vector (T VectorSize Real)
env Real
attTime Real
emph Real
attHL Real
dec Real
rel ChunkSize
vcsize SampleRate Real
sr Real
vel LazyTime
dur))
            (Real
-> Real
-> Real
-> Real
-> Real
-> ChunkSize
-> SampleRate Real
-> Real
-> LazyTime
-> Vector (T VectorSize Real)
env Real
attTime Real
attPeak Real
attHL Real
dec Real
rel ChunkSize
vcsize SampleRate Real
sr Real
vel LazyTime
dur))
      (let osci ::
              Exp Real ->
              Causal.T
                 (VectorValue,
                       {- wave shrink/replication factor -}
                  (VectorValue, VectorValue)
                       {- detune, frequency modulation -})
                 VectorValue
           osci :: Exp Real
-> T (Serial VectorSize Real,
      (Serial VectorSize Real, Serial VectorSize Real))
     (Serial VectorSize Real)
osci Exp Real
d =
              (forall r.
 Serial VectorSize Real
 -> Serial VectorSize Real
 -> CodeGenFunction r (Serial VectorSize Real))
-> T (Serial VectorSize Real,
      (Serial VectorSize Real, Serial VectorSize Real))
     (Serial 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 Serial VectorSize Real
-> Serial VectorSize Real
-> CodeGenFunction r (Serial VectorSize Real)
forall r.
Serial VectorSize Real
-> Serial VectorSize Real
-> CodeGenFunction r (Serial VectorSize Real)
forall a r.
(Field a, RationalConstant a, Real a) =>
a -> a -> CodeGenFunction r a
WaveL.rationalApproxSine1
              T (Serial VectorSize Real,
   (Serial VectorSize Real, Serial VectorSize Real))
  (Serial VectorSize Real)
-> T (Serial VectorSize Real,
      (Serial VectorSize Real, Serial VectorSize Real))
     (Serial VectorSize Real,
      (Serial VectorSize Real, Serial VectorSize Real))
-> T (Serial VectorSize Real,
      (Serial VectorSize Real, Serial VectorSize Real))
     (Serial VectorSize Real)
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
<<<
              T (Serial VectorSize Real, Serial VectorSize Real)
  (Serial VectorSize Real, Serial VectorSize Real)
-> T (Serial VectorSize Real,
      (Serial VectorSize Real, Serial VectorSize Real))
     (Serial VectorSize Real,
      (Serial VectorSize Real, Serial 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 (Serial VectorSize Real)
-> T (Serial VectorSize Real)
     (Serial VectorSize Real, Serial VectorSize Real)
forall (process :: * -> * -> *) a b.
C process =>
SignalOf process a -> process b (a, b)
CausalClass.feedFst SignalOf T (Serial VectorSize Real)
T (Serial VectorSize Real)
forall a. C a => a
zero
                  T (Serial VectorSize Real)
  (Serial VectorSize Real, Serial VectorSize Real)
-> T (Serial VectorSize Real, Serial VectorSize Real)
     (Serial VectorSize Real)
-> T (Serial VectorSize Real, Serial VectorSize Real)
     (Serial VectorSize Real, Serial VectorSize Real)
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
<<<
                  T (Serial VectorSize Real, Serial VectorSize Real)
  (Serial VectorSize Real)
forall a. PseudoRing a => T (a, a) a
Causal.envelope
                  T (Serial VectorSize Real, Serial VectorSize Real)
  (Serial VectorSize Real)
-> T (Serial VectorSize Real, Serial VectorSize Real)
     (Serial VectorSize Real, Serial VectorSize Real)
-> T (Serial VectorSize Real, Serial VectorSize Real)
     (Serial VectorSize Real)
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
<<<
                  T (Serial VectorSize Real) (Serial VectorSize Real)
-> T (Serial VectorSize Real, Serial VectorSize Real)
     (Serial VectorSize Real, Serial 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 (Serial VectorSize Real) (Serial VectorSize Real)
forall a. C a => a
one T (Serial VectorSize Real) (Serial VectorSize Real)
-> T (Serial VectorSize Real) (Serial VectorSize Real)
-> T (Serial VectorSize Real) (Serial VectorSize Real)
forall a. C a => a -> a -> a
+ Exp Real -> T (Serial VectorSize Real) (Serial VectorSize Real)
forall n a.
(Positive n, PseudoRing a) =>
Exp a -> T (Serial n a) (Serial n a)
CausalPS.amplify Exp Real
d))
       in DSL
  (SampleRate Real
   -> T Real
   -> T Real
   -> (T (T Real), Real)
   -> Vector (T VectorSize Real)
   -> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real))))
  (Element
     (In
        (SampleRate Real
         -> T Real
         -> T Real
         -> (T (T Real), Real)
         -> Vector (T VectorSize Real)
         -> T (Vector (T VectorSize Real))
              (Vector (T (T VectorSize Real))))))
  (Element
     (Out
        (SampleRate Real
         -> T Real
         -> T Real
         -> (T (T Real), Real)
         -> Vector (T VectorSize Real)
         -> T (Vector (T VectorSize Real))
              (Vector (T (T VectorSize Real))))))
-> IO
     (SampleRate Real
      -> T Real
      -> T Real
      -> (T (T Real), Real)
      -> Vector (T VectorSize Real)
      -> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real))))
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 Real
    -> T Real
    -> (T (T Real), Real)
    -> Vector (T VectorSize Real)
    -> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real))))
   (Element
      (In
         (SampleRate Real
          -> T Real
          -> T Real
          -> (T (T Real), Real)
          -> Vector (T VectorSize Real)
          -> T (Vector (T VectorSize Real))
               (Vector (T (T VectorSize Real))))))
   (Element
      (Out
         (SampleRate Real
          -> T Real
          -> T Real
          -> (T (T Real), Real)
          -> Vector (T VectorSize Real)
          -> T (Vector (T VectorSize Real))
               (Vector (T (T VectorSize Real))))))
 -> IO
      (SampleRate Real
       -> T Real
       -> T Real
       -> (T (T Real), Real)
       -> Vector (T VectorSize Real)
       -> T (Vector (T VectorSize Real))
            (Vector (T (T VectorSize Real)))))
-> DSL
     (SampleRate Real
      -> T Real
      -> T Real
      -> (T (T Real), Real)
      -> Vector (T VectorSize Real)
      -> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real))))
     (Element
        (In
           (SampleRate Real
            -> T Real
            -> T Real
            -> (T (T Real), Real)
            -> Vector (T VectorSize Real)
            -> T (Vector (T VectorSize Real))
                 (Vector (T (T VectorSize Real))))))
     (Element
        (Out
           (SampleRate Real
            -> T Real
            -> T Real
            -> (T (T Real), Real)
            -> Vector (T VectorSize Real)
            -> T (Vector (T VectorSize Real))
                 (Vector (T (T VectorSize Real))))))
-> IO
     (SampleRate Real
      -> T Real
      -> T Real
      -> (T (T Real), Real)
      -> Vector (T VectorSize Real)
      -> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real))))
forall a b. (a -> b) -> a -> b
$
          (InputArg (Control (T RealValue)) (Exp Real)
 -> InputArg (Control (T RealValue)) (Exp Real)
 -> InputArg (Modulation Real) (Exp Real)
 -> InputArg (Signal (Serial VectorSize Real)) (Exp Real)
 -> SampleRate (Exp Real)
 -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
-> SampleRate (Exp Real)
-> Unwrapped
     (InputArg (Control (T RealValue)) (Exp Real)
      -> InputArg (Control (T RealValue)) (Exp Real)
      -> InputArg (Modulation Real) (Exp Real)
      -> InputArg (Signal (Serial VectorSize Real)) (Exp Real)
      -> SampleRate (Exp Real)
      -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
forall a f. Wrapped a f => f -> SampleRate a -> Unwrapped f
wrapped ((InputArg (Control (T RealValue)) (Exp Real)
  -> InputArg (Control (T RealValue)) (Exp Real)
  -> InputArg (Modulation Real) (Exp Real)
  -> InputArg (Signal (Serial VectorSize Real)) (Exp Real)
  -> SampleRate (Exp Real)
  -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
 -> SampleRate (Exp Real)
 -> Unwrapped
      (InputArg (Control (T RealValue)) (Exp Real)
       -> InputArg (Control (T RealValue)) (Exp Real)
       -> InputArg (Modulation Real) (Exp Real)
       -> InputArg (Signal (Serial VectorSize Real)) (Exp Real)
       -> SampleRate (Exp Real)
       -> T (Serial VectorSize Real) (T (T (T VectorSize Real)))))
-> (InputArg (Control (T RealValue)) (Exp Real)
    -> InputArg (Control (T RealValue)) (Exp Real)
    -> InputArg (Modulation Real) (Exp Real)
    -> InputArg (Signal (Serial VectorSize Real)) (Exp Real)
    -> SampleRate (Exp Real)
    -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
-> SampleRate (Exp Real)
-> Unwrapped
     (InputArg (Control (T RealValue)) (Exp Real)
      -> InputArg (Control (T RealValue)) (Exp Real)
      -> InputArg (Modulation Real) (Exp Real)
      -> InputArg (Signal (Serial VectorSize Real)) (Exp Real)
      -> SampleRate (Exp Real)
      -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
forall a b. (a -> b) -> a -> b
$
             \(Control T (T RealValue)
det) (Control T (T RealValue)
dist) (Modulation T (T (T RealValue))
fm) (Signal T (Serial VectorSize Real)
emph) ->
          (SampleRate (Exp Real) -> Exp Real -> Exp Real)
-> Exp Real
-> (Exp Real
    -> SampleRate (Exp Real)
    -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
-> SampleRate (Exp Real)
-> T (Serial VectorSize 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 (Serial VectorSize Real) (T (T (T VectorSize Real))))
 -> SampleRate (Exp Real)
 -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
-> (Exp Real
    -> SampleRate (Exp Real)
    -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
-> SampleRate (Exp Real)
-> T (Serial VectorSize Real) (T (T (T VectorSize Real)))
forall a b. (a -> b) -> a -> b
$ \Exp Real
speed SampleRate (Exp Real)
_sr ->
            T (Serial VectorSize Real) -> T (T (T VectorSize Real))
forall a. T (T a) -> T (T a)
Stereo.multiValue (T (Serial VectorSize Real) -> T (T (T VectorSize Real)))
-> T (Serial VectorSize Real, T (Serial VectorSize Real))
     (T (Serial VectorSize Real))
-> T (Serial VectorSize Real, T (Serial VectorSize Real))
     (T (T (T VectorSize Real)))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$>
            T (Serial VectorSize Real, T (Serial VectorSize Real))
  (T (Serial VectorSize Real))
forall a. PseudoRing a => T (a, T a) (T a)
Causal.envelopeStereo T (Serial VectorSize Real, T (Serial VectorSize Real))
  (T (T (T VectorSize Real)))
-> SignalOf T (T (Serial VectorSize Real))
-> T (Serial VectorSize Real) (T (T (T VectorSize Real)))
forall (process :: * -> * -> *) a b c.
C process =>
process (a, b) c -> SignalOf process b -> process a c
$>
              ((Exp Real
 -> T (Serial VectorSize Real,
       (Serial VectorSize Real, Serial VectorSize Real))
      (Serial VectorSize Real))
-> T (Serial VectorSize Real,
      (Serial VectorSize Real, Serial VectorSize Real))
     (T (Serial VectorSize Real))
forall a.
(Exp Real -> T a (Serial VectorSize Real))
-> T a (T (Serial VectorSize Real))
phaserOsci Exp Real
-> T (Serial VectorSize Real,
      (Serial VectorSize Real, Serial VectorSize Real))
     (Serial VectorSize Real)
osci
               T (Serial VectorSize Real,
   (Serial VectorSize Real, Serial VectorSize Real))
  (T (Serial VectorSize Real))
-> T (Serial VectorSize Real)
     (Serial VectorSize Real,
      (Serial VectorSize Real, Serial VectorSize Real))
-> T (Serial VectorSize Real) (T (Serial VectorSize Real))
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
<<<
               SignalOf T (Serial VectorSize Real)
-> T (Serial VectorSize Real, Serial VectorSize Real)
     (Serial VectorSize Real,
      (Serial VectorSize Real, Serial VectorSize Real))
forall (process :: * -> * -> *) a b.
C process =>
SignalOf process a -> process b (a, b)
CausalClass.feedFst (T (T RealValue) -> T (Serial VectorSize Real)
piecewiseConstantVector T (T RealValue)
dist)
               T (Serial VectorSize Real, Serial VectorSize Real)
  (Serial VectorSize Real,
   (Serial VectorSize Real, Serial VectorSize Real))
-> T (Serial VectorSize Real)
     (Serial VectorSize Real, Serial VectorSize Real)
-> T (Serial VectorSize Real)
     (Serial VectorSize Real,
      (Serial VectorSize Real, Serial VectorSize Real))
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
<<<
               SignalOf T (Serial VectorSize Real)
-> T (Serial VectorSize Real)
     (Serial VectorSize Real, Serial VectorSize Real)
forall (process :: * -> * -> *) a b.
C process =>
SignalOf process a -> process b (b, a)
CausalClass.feedSnd (Exp Real -> T (T (T RealValue)) -> T (Serial VectorSize Real)
frequencyFromBendModulation Exp Real
speed T (T (T RealValue))
fm)
               T (Serial VectorSize Real)
  (Serial VectorSize Real, Serial VectorSize Real)
-> T (Serial VectorSize Real) (Serial VectorSize Real)
-> T (Serial VectorSize Real)
     (Serial VectorSize Real, Serial VectorSize Real)
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
<<<
               (T (Serial VectorSize Real, Serial VectorSize Real)
  (Serial VectorSize Real)
forall a. PseudoRing a => T (a, a) a
Causal.envelope T (Serial VectorSize Real, Serial VectorSize Real)
  (Serial VectorSize Real)
-> SignalOf T (Serial VectorSize Real)
-> T (Serial VectorSize Real) (Serial VectorSize Real)
forall (process :: * -> * -> *) a b c.
C process =>
process (a, b) c -> SignalOf process a -> process b c
$< T (T RealValue) -> T (Serial VectorSize Real)
piecewiseConstantVector T (T RealValue)
det)
               T (Serial VectorSize Real) (T (Serial VectorSize Real))
-> SignalOf T (Serial VectorSize Real)
-> SignalOf T (T (Serial VectorSize Real))
forall (process :: * -> * -> *) a b.
C process =>
process a b -> SignalOf process a -> SignalOf process b
$*
               SignalOf T (Serial VectorSize Real)
T (Serial VectorSize Real)
emph))
      IO
  (Real
   -> Real
   -> Real
   -> Real
   -> Real
   -> ChunkSize
   -> SampleRate Real
   -> Real
   -> LazyTime
   -> Vector (T VectorSize Real))
adsr


sampledSound ::
   IO (Sample.T ->
       PC.T (BM.T Real) ->
       Instrument Real (Stereo.T Vector))
sampledSound :: IO (T -> T (T Real) -> Instrument Real (T (T VectorSize Real)))
sampledSound =
   ((SampleRate Real
  -> Real
  -> T Real
  -> T ChunkSize
  -> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real))))
 -> (SampleRate Real
     -> (T (T Real), Real) -> T LazySize (Vector (T VectorSize Real)))
 -> T
 -> T (T Real)
 -> Instrument Real (T (T VectorSize Real)))
-> IO
     (SampleRate Real
      -> Real
      -> T Real
      -> T ChunkSize
      -> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real))))
-> IO
     (SampleRate Real
      -> (T (T Real), Real) -> T LazySize (Vector (T VectorSize Real)))
-> IO (T -> T (T Real) -> Instrument Real (T (T VectorSize Real)))
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 Real
-> T ChunkSize
-> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real)))
osc SampleRate Real
-> (T (T Real), Real) -> T LazySize (Vector (T VectorSize Real))
freqMod T
smp T (T Real)
fm SampleRate Real
sr Real
vel Real
freq LazyTime
dur ->
         {-
         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@.
         -}
         let fmSig :: SigSt.T Vector
             fmSig :: Vector (T VectorSize Real)
fmSig =
               T LazySize (Vector (T VectorSize Real))
-> LazyTime -> Vector (T VectorSize Real)
forall b.
Storable b =>
T LazySize (Vector b) -> LazyTime -> Vector b
pioApplyToLazyTime
                  (SampleRate Real
-> (T (T Real), Real) -> T LazySize (Vector (T VectorSize Real))
freqMod SampleRate Real
sr (T (T Real)
fm, Real
freq Real -> Real -> Real
forall a. C a => a -> a -> a
* Positions -> Real
Sample.period Positions
pos))
                  (T (T Real) -> LazyTime
forall y. T y -> LazyTime
PC.duration T (T Real)
fm)
             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
             (T Real
attack, T Real
sustain, T Real
release) = T -> (T Real, T Real, T Real)
Sample.parts T
smp
         in (\Vector (T VectorSize Real) -> T (T (T VectorSize Real))
cont ->
               (Vector (T VectorSize Real) -> T (T (T VectorSize Real)))
-> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real)))
-> Vector (T VectorSize Real)
-> T (T (T VectorSize Real))
forall a b.
(Storable a, Storable b) =>
(Vector a -> Vector b)
-> T (Vector a) (Vector b) -> Vector a -> Vector b
pioApplyCont Vector (T VectorSize Real) -> T (T (T VectorSize Real))
cont
                  (SampleRate Real
-> Real
-> T Real
-> T ChunkSize
-> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real)))
osc SampleRate Real
sr Real
amp
                     (T Real
attack T Real -> T Real -> T Real
forall a. Semigroup a => a -> a -> a
<>
                      T Real -> T Real
forall a. Storable a => Vector a -> Vector a
SVL.cycle (Int -> T Real -> T Real
forall a. Storable a => Int -> Vector a -> Vector a
SigSt.take (Positions -> Int
Sample.loopLength Positions
pos) T Real
sustain))
                     (LazyTime -> T ChunkSize
chunkSizesFromLazyTime LazyTime
dur))
                  Vector (T VectorSize Real)
fmSig)
            ((Vector (T VectorSize Real) -> T (T (T VectorSize Real)))
-> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real)))
-> Vector (T VectorSize Real)
-> T (T (T VectorSize Real))
forall a b.
(Storable a, Storable b) =>
(Vector a -> Vector b)
-> T (Vector a) (Vector b) -> Vector a -> Vector b
pioApplyCont (T (T (T VectorSize Real))
-> Vector (T VectorSize Real) -> T (T (T VectorSize Real))
forall a b. a -> b -> a
const T (T (T VectorSize Real))
forall a. Storable a => Vector a
SigSt.empty)
               (SampleRate Real
-> Real
-> T Real
-> T ChunkSize
-> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real)))
osc SampleRate Real
sr Real
amp T Real
release ([ChunkSize] -> T ChunkSize
forall a. C a => [a] -> T a
NonNegChunky.fromChunks (ChunkSize -> [ChunkSize]
forall a. a -> [a]
repeat ChunkSize
1000)))))
      (DSL
  (SampleRate Real
   -> Real
   -> T Real
   -> T ChunkSize
   -> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real))))
  (Element
     (In
        (SampleRate Real
         -> Real
         -> T Real
         -> T ChunkSize
         -> T (Vector (T VectorSize Real))
              (Vector (T (T VectorSize Real))))))
  (Element
     (Out
        (SampleRate Real
         -> Real
         -> T Real
         -> T ChunkSize
         -> T (Vector (T VectorSize Real))
              (Vector (T (T VectorSize Real))))))
-> IO
     (SampleRate Real
      -> Real
      -> T Real
      -> T ChunkSize
      -> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real))))
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 Real
    -> T ChunkSize
    -> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real))))
   (Element
      (In
         (SampleRate Real
          -> Real
          -> T Real
          -> T ChunkSize
          -> T (Vector (T VectorSize Real))
               (Vector (T (T VectorSize Real))))))
   (Element
      (Out
         (SampleRate Real
          -> Real
          -> T Real
          -> T ChunkSize
          -> T (Vector (T VectorSize Real))
               (Vector (T (T VectorSize Real))))))
 -> IO
      (SampleRate Real
       -> Real
       -> T Real
       -> T ChunkSize
       -> T (Vector (T VectorSize Real))
            (Vector (T (T VectorSize Real)))))
-> DSL
     (SampleRate Real
      -> Real
      -> T Real
      -> T ChunkSize
      -> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real))))
     (Element
        (In
           (SampleRate Real
            -> Real
            -> T Real
            -> T ChunkSize
            -> T (Vector (T VectorSize Real))
                 (Vector (T (T VectorSize Real))))))
     (Element
        (Out
           (SampleRate Real
            -> Real
            -> T Real
            -> T ChunkSize
            -> T (Vector (T VectorSize Real))
                 (Vector (T (T VectorSize Real))))))
-> IO
     (SampleRate Real
      -> Real
      -> T Real
      -> T ChunkSize
      -> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real))))
forall a b. (a -> b) -> a -> b
$
       (Arg Number (Exp Real)
 -> InputArg (Signal RealValue) (Exp Real)
 -> InputArg (Signal (T ())) (Exp Real)
 -> SampleRate (Exp Real)
 -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
-> SampleRate (Exp Real)
-> Unwrapped
     (Arg Number (Exp Real)
      -> InputArg (Signal RealValue) (Exp Real)
      -> InputArg (Signal (T ())) (Exp Real)
      -> SampleRate (Exp Real)
      -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
forall a f. Wrapped a f => f -> SampleRate a -> Unwrapped f
wrapped ((Arg Number (Exp Real)
  -> InputArg (Signal RealValue) (Exp Real)
  -> InputArg (Signal (T ())) (Exp Real)
  -> SampleRate (Exp Real)
  -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
 -> SampleRate (Exp Real)
 -> Unwrapped
      (Arg Number (Exp Real)
       -> InputArg (Signal RealValue) (Exp Real)
       -> InputArg (Signal (T ())) (Exp Real)
       -> SampleRate (Exp Real)
       -> T (Serial VectorSize Real) (T (T (T VectorSize Real)))))
-> (Arg Number (Exp Real)
    -> InputArg (Signal RealValue) (Exp Real)
    -> InputArg (Signal (T ())) (Exp Real)
    -> SampleRate (Exp Real)
    -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
-> SampleRate (Exp Real)
-> Unwrapped
     (Arg Number (Exp Real)
      -> InputArg (Signal RealValue) (Exp Real)
      -> InputArg (Signal (T ())) (Exp Real)
      -> SampleRate (Exp Real)
      -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
forall a b. (a -> b) -> a -> b
$ \(Number Exp Real
amp) (Signal T RealValue
smp) (Signal T (T ())
dur) (SampleRate Exp Real
_sr) ->
         T (Serial VectorSize Real) -> T (T (T VectorSize Real))
forall a. T (T a) -> T (T a)
Stereo.multiValue (T (Serial VectorSize Real) -> T (T (T VectorSize Real)))
-> T (T (Serial VectorSize Real)) (T (Serial VectorSize Real))
-> T (T (Serial VectorSize Real)) (T (T (T VectorSize Real)))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$>
         Exp Real
-> T (T (Serial VectorSize Real)) (T (Serial 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 (Serial VectorSize Real)) (T (T (T VectorSize Real)))
-> T (Serial VectorSize Real) (T (Serial VectorSize Real))
-> T (Serial VectorSize Real) (T (T (T VectorSize Real)))
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
<<<
              T (Serial VectorSize Real) (Serial VectorSize Real)
-> T (T (Serial VectorSize Real)) (T (Serial VectorSize Real))
forall a b.
(Phi a, Undefined a, Phi b, Undefined b) =>
T a b -> T (T a) (T b)
Causal.stereoFromMono
                 (T RealValue RealValue
-> T (Serial VectorSize Real) (Serial 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 RealValue -> T RealValue RealValue
forall a.
(PseudoRing a, IntegerConstant a, Comparison a, C a) =>
MV a -> MV a a
Causal.frequencyModulationLinear T RealValue
smp))
              T (T (Serial VectorSize Real)) (T (Serial VectorSize Real))
-> T (Serial VectorSize Real) (T (Serial VectorSize Real))
-> T (Serial VectorSize Real) (T (Serial VectorSize Real))
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
<<<
              (Serial VectorSize Real
 -> Serial VectorSize Real -> T (Serial VectorSize Real))
-> T (Serial VectorSize Real) (Serial VectorSize Real)
-> T (Serial VectorSize Real) (Serial VectorSize Real)
-> T (Serial VectorSize Real) (T (Serial VectorSize Real))
forall a b c.
(a -> b -> c)
-> T (Serial VectorSize Real) a
-> T (Serial VectorSize Real) b
-> T (Serial VectorSize Real) c
forall (f :: * -> *) a b c.
Applicative f =>
(a -> b -> c) -> f a -> f b -> f c
liftA2 Serial VectorSize Real
-> Serial VectorSize Real -> T (Serial VectorSize Real)
forall a. a -> a -> T a
Stereo.cons
                 (Exp Real -> T (Serial VectorSize Real) (Serial VectorSize Real)
forall n a.
(Positive n, PseudoRing a) =>
Exp a -> T (Serial n a) (Serial n a)
CausalPS.amplify Exp Real
0.999)
                 (Exp Real -> T (Serial VectorSize Real) (Serial VectorSize Real)
forall n a.
(Positive n, PseudoRing a) =>
Exp a -> T (Serial n a) (Serial n a)
CausalPS.amplify Exp Real
1.001)
              T (Serial VectorSize Real) (T (Serial VectorSize Real))
-> T (Serial VectorSize Real) (Serial VectorSize Real)
-> T (Serial VectorSize Real) (T (Serial VectorSize Real))
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
<<<
              ((Serial VectorSize Real, ()) -> Serial VectorSize Real)
-> T (Serial VectorSize Real, ()) (Serial VectorSize Real)
forall b c. (b -> c) -> T b c
forall (a :: * -> * -> *) b c. Arrow a => (b -> c) -> a b c
arr (Serial VectorSize Real, ()) -> Serial VectorSize Real
forall a b. (a, b) -> a
fst
              T (Serial VectorSize Real, ()) (Serial VectorSize Real)
-> T (Serial VectorSize Real) (Serial VectorSize Real, ())
-> T (Serial VectorSize Real) (Serial VectorSize Real)
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 (Serial VectorSize Real) (Serial VectorSize Real, ())
forall (process :: * -> * -> *) a b.
C process =>
SignalOf process a -> process b (b, a)
CausalClass.feedSnd (T (T ()) -> T ()
forall a. C a => T (T a) -> T a
Const.flatten T (T ())
dur))
      (DSL
  (SampleRate Real
   -> (T (T Real), Real) -> T LazySize (Vector (T VectorSize Real)))
  (Element
     (In
        (SampleRate Real
         -> (T (T Real), Real) -> T LazySize (Vector (T VectorSize Real)))))
  (Element
     (Out
        (SampleRate Real
         -> (T (T Real), Real) -> T LazySize (Vector (T VectorSize Real)))))
-> IO
     (SampleRate Real
      -> (T (T Real), Real) -> T LazySize (Vector (T VectorSize Real)))
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 Real), Real) -> T LazySize (Vector (T VectorSize Real)))
   (Element
      (In
         (SampleRate Real
          -> (T (T Real), Real) -> T LazySize (Vector (T VectorSize Real)))))
   (Element
      (Out
         (SampleRate Real
          -> (T (T Real), Real) -> T LazySize (Vector (T VectorSize Real)))))
 -> IO
      (SampleRate Real
       -> (T (T Real), Real) -> T LazySize (Vector (T VectorSize Real))))
-> DSL
     (SampleRate Real
      -> (T (T Real), Real) -> T LazySize (Vector (T VectorSize Real)))
     (Element
        (In
           (SampleRate Real
            -> (T (T Real), Real) -> T LazySize (Vector (T VectorSize Real)))))
     (Element
        (Out
           (SampleRate Real
            -> (T (T Real), Real) -> T LazySize (Vector (T VectorSize Real)))))
-> IO
     (SampleRate Real
      -> (T (T Real), Real) -> T LazySize (Vector (T VectorSize Real)))
forall a b. (a -> b) -> a -> b
$
       (InputArg (Modulation Real) (Exp Real)
 -> SampleRate (Exp Real) -> T () (Serial VectorSize Real))
-> SampleRate (Exp Real)
-> Unwrapped
     (InputArg (Modulation Real) (Exp Real)
      -> SampleRate (Exp Real) -> T () (Serial VectorSize Real))
forall a f. Wrapped a f => f -> SampleRate a -> Unwrapped f
wrapped ((InputArg (Modulation Real) (Exp Real)
  -> SampleRate (Exp Real) -> T () (Serial VectorSize Real))
 -> SampleRate (Exp Real)
 -> Unwrapped
      (InputArg (Modulation Real) (Exp Real)
       -> SampleRate (Exp Real) -> T () (Serial VectorSize Real)))
-> (InputArg (Modulation Real) (Exp Real)
    -> SampleRate (Exp Real) -> T () (Serial VectorSize Real))
-> SampleRate (Exp Real)
-> Unwrapped
     (InputArg (Modulation Real) (Exp Real)
      -> SampleRate (Exp Real) -> T () (Serial VectorSize Real))
forall a b. (a -> b) -> a -> b
$ \(Modulation T (T (T RealValue))
fm) ->
       (SampleRate (Exp Real) -> Exp Real -> Exp Real)
-> Exp Real
-> (Exp Real
    -> SampleRate (Exp Real) -> T () (Serial VectorSize Real))
-> SampleRate (Exp Real)
-> T () (Serial 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 () (Serial VectorSize Real))
 -> SampleRate (Exp Real) -> T () (Serial VectorSize Real))
-> (Exp Real
    -> SampleRate (Exp Real) -> T () (Serial VectorSize Real))
-> SampleRate (Exp Real)
-> T () (Serial VectorSize Real)
forall a b. (a -> b) -> a -> b
$ \Exp Real
speed SampleRate (Exp Real)
_sr ->
         SignalOf T (Serial VectorSize Real)
-> T () (Serial 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 (Serial VectorSize Real)
 -> T () (Serial VectorSize Real))
-> SignalOf T (Serial VectorSize Real)
-> T () (Serial VectorSize Real)
forall a b. (a -> b) -> a -> b
$ Exp Real -> T (T (T RealValue)) -> T (Serial VectorSize Real)
frequencyFromBendModulation Exp Real
speed T (T (T RealValue))
fm)


_sampledSoundLeaky ::
   IO (Sample.T ->
       PC.T (BM.T Real) ->
       Instrument Real (Stereo.T Vector))
_sampledSoundLeaky :: IO (T -> T (T Real) -> Instrument Real (T (T VectorSize Real)))
_sampledSoundLeaky =
   ((SampleRate Real
  -> Real
  -> T Real
  -> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real))))
 -> (SampleRate Real
     -> (T (T Real), Real) -> T LazySize (Vector (T VectorSize Real)))
 -> T
 -> T (T Real)
 -> Instrument Real (T (T VectorSize Real)))
-> IO
     (SampleRate Real
      -> Real
      -> T Real
      -> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real))))
-> IO
     (SampleRate Real
      -> (T (T Real), Real) -> T LazySize (Vector (T VectorSize Real)))
-> IO (T -> T (T Real) -> Instrument Real (T (T VectorSize Real)))
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 Real
-> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real)))
osc SampleRate Real
-> (T (T Real), Real) -> T LazySize (Vector (T VectorSize Real))
freqMod T
smp T (T Real)
fm SampleRate Real
sr Real
vel Real
freq LazyTime
dur ->
         {-
         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@.
         -}
         let sustainFM, releaseFM :: SigSt.T Vector
             (Vector (T VectorSize Real)
sustainFM, Vector (T VectorSize Real)
releaseFM) =
               T ChunkSize
-> Vector (T VectorSize Real)
-> (Vector (T VectorSize Real), Vector (T VectorSize Real))
forall a.
Storable a =>
T ChunkSize -> Vector a -> (Vector a, Vector a)
SVP.splitAt (LazyTime -> T ChunkSize
chunkSizesFromLazyTime LazyTime
dur) (Vector (T VectorSize Real)
 -> (Vector (T VectorSize Real), Vector (T VectorSize Real)))
-> Vector (T VectorSize Real)
-> (Vector (T VectorSize Real), Vector (T VectorSize Real))
forall a b. (a -> b) -> a -> b
$
               T LazySize (Vector (T VectorSize Real))
-> LazyTime -> Vector (T VectorSize Real)
forall b.
Storable b =>
T LazySize (Vector b) -> LazyTime -> Vector b
pioApplyToLazyTime
                  (SampleRate Real
-> (T (T Real), Real) -> T LazySize (Vector (T VectorSize Real))
freqMod SampleRate Real
sr (T (T Real)
fm, Real
freq Real -> Real -> Real
forall a. C a => a -> a -> a
* Positions -> Real
Sample.period Positions
pos))
                  (T (T Real) -> LazyTime
forall y. T y -> LazyTime
PC.duration T (T Real)
fm)
             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
             (T Real
attack, T Real
sustain, T Real
release) = T -> (T Real, T Real, T Real)
Sample.parts T
smp
         in T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real)))
-> Vector (T VectorSize Real) -> T (T (T VectorSize Real))
forall a b.
(Storable a, Storable b) =>
T (Vector a) (Vector b) -> Vector a -> Vector b
pioApply
               (SampleRate Real
-> Real
-> T Real
-> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real)))
osc SampleRate Real
sr Real
amp
                  (T Real
attack T Real -> T Real -> T Real
forall a. Semigroup a => a -> a -> a
<>
                   T Real -> T Real
forall a. Storable a => Vector a -> Vector a
SVL.cycle (Int -> T Real -> T Real
forall a. Storable a => Int -> Vector a -> Vector a
SigSt.take (Positions -> Int
Sample.loopLength Positions
pos) T Real
sustain)))
               Vector (T VectorSize Real)
sustainFM
            T (T (T VectorSize Real))
-> T (T (T VectorSize Real)) -> T (T (T VectorSize Real))
forall a. Semigroup a => a -> a -> a
<>
            T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real)))
-> Vector (T VectorSize Real) -> T (T (T VectorSize Real))
forall a b.
(Storable a, Storable b) =>
T (Vector a) (Vector b) -> Vector a -> Vector b
pioApply (SampleRate Real
-> Real
-> T Real
-> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real)))
osc SampleRate Real
sr Real
amp T Real
release) Vector (T VectorSize Real)
releaseFM)
      (DSL
  (SampleRate Real
   -> Real
   -> T Real
   -> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real))))
  (Element
     (In
        (SampleRate Real
         -> Real
         -> T Real
         -> T (Vector (T VectorSize Real))
              (Vector (T (T VectorSize Real))))))
  (Element
     (Out
        (SampleRate Real
         -> Real
         -> T Real
         -> T (Vector (T VectorSize Real))
              (Vector (T (T VectorSize Real))))))
-> IO
     (SampleRate Real
      -> Real
      -> T Real
      -> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real))))
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 Real
    -> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real))))
   (Element
      (In
         (SampleRate Real
          -> Real
          -> T Real
          -> T (Vector (T VectorSize Real))
               (Vector (T (T VectorSize Real))))))
   (Element
      (Out
         (SampleRate Real
          -> Real
          -> T Real
          -> T (Vector (T VectorSize Real))
               (Vector (T (T VectorSize Real))))))
 -> IO
      (SampleRate Real
       -> Real
       -> T Real
       -> T (Vector (T VectorSize Real))
            (Vector (T (T VectorSize Real)))))
-> DSL
     (SampleRate Real
      -> Real
      -> T Real
      -> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real))))
     (Element
        (In
           (SampleRate Real
            -> Real
            -> T Real
            -> T (Vector (T VectorSize Real))
                 (Vector (T (T VectorSize Real))))))
     (Element
        (Out
           (SampleRate Real
            -> Real
            -> T Real
            -> T (Vector (T VectorSize Real))
                 (Vector (T (T VectorSize Real))))))
-> IO
     (SampleRate Real
      -> Real
      -> T Real
      -> T (Vector (T VectorSize Real)) (Vector (T (T VectorSize Real))))
forall a b. (a -> b) -> a -> b
$
       (Arg Number (Exp Real)
 -> InputArg (Signal RealValue) (Exp Real)
 -> SampleRate (Exp Real)
 -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
-> SampleRate (Exp Real)
-> Unwrapped
     (Arg Number (Exp Real)
      -> InputArg (Signal RealValue) (Exp Real)
      -> SampleRate (Exp Real)
      -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
forall a f. Wrapped a f => f -> SampleRate a -> Unwrapped f
wrapped ((Arg Number (Exp Real)
  -> InputArg (Signal RealValue) (Exp Real)
  -> SampleRate (Exp Real)
  -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
 -> SampleRate (Exp Real)
 -> Unwrapped
      (Arg Number (Exp Real)
       -> InputArg (Signal RealValue) (Exp Real)
       -> SampleRate (Exp Real)
       -> T (Serial VectorSize Real) (T (T (T VectorSize Real)))))
-> (Arg Number (Exp Real)
    -> InputArg (Signal RealValue) (Exp Real)
    -> SampleRate (Exp Real)
    -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
-> SampleRate (Exp Real)
-> Unwrapped
     (Arg Number (Exp Real)
      -> InputArg (Signal RealValue) (Exp Real)
      -> SampleRate (Exp Real)
      -> T (Serial VectorSize Real) (T (T (T VectorSize Real))))
forall a b. (a -> b) -> a -> b
$ \(Number Exp Real
amp) (Signal T RealValue
smp) (SampleRate Exp Real
_sr) ->
         T (Serial VectorSize Real) -> T (T (T VectorSize Real))
forall a. T (T a) -> T (T a)
Stereo.multiValue (T (Serial VectorSize Real) -> T (T (T VectorSize Real)))
-> T (T (Serial VectorSize Real)) (T (Serial VectorSize Real))
-> T (T (Serial VectorSize Real)) (T (T (T VectorSize Real)))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$>
              Exp Real
-> T (T (Serial VectorSize Real)) (T (Serial 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 (Serial VectorSize Real)) (T (T (T VectorSize Real)))
-> T (Serial VectorSize Real) (T (Serial VectorSize Real))
-> T (Serial VectorSize Real) (T (T (T VectorSize Real)))
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
<<<
              T (Serial VectorSize Real) (Serial VectorSize Real)
-> T (T (Serial VectorSize Real)) (T (Serial VectorSize Real))
forall a b.
(Phi a, Undefined a, Phi b, Undefined b) =>
T a b -> T (T a) (T b)
Causal.stereoFromMono
                 (T RealValue RealValue
-> T (Serial VectorSize Real) (Serial 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 RealValue -> T RealValue RealValue
forall a.
(PseudoRing a, IntegerConstant a, Comparison a, C a) =>
MV a -> MV a a
Causal.frequencyModulationLinear T RealValue
smp))
              T (T (Serial VectorSize Real)) (T (Serial VectorSize Real))
-> T (Serial VectorSize Real) (T (Serial VectorSize Real))
-> T (Serial VectorSize Real) (T (Serial VectorSize Real))
forall {k} (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
<<<
              (Serial VectorSize Real
 -> Serial VectorSize Real -> T (Serial VectorSize Real))
-> T (Serial VectorSize Real) (Serial VectorSize Real)
-> T (Serial VectorSize Real) (Serial VectorSize Real)
-> T (Serial VectorSize Real) (T (Serial VectorSize Real))
forall a b c.
(a -> b -> c)
-> T (Serial VectorSize Real) a
-> T (Serial VectorSize Real) b
-> T (Serial VectorSize Real) c
forall (f :: * -> *) a b c.
Applicative f =>
(a -> b -> c) -> f a -> f b -> f c
liftA2 Serial VectorSize Real
-> Serial VectorSize Real -> T (Serial VectorSize Real)
forall a. a -> a -> T a
Stereo.cons
                 (Exp Real -> T (Serial VectorSize Real) (Serial VectorSize Real)
forall n a.
(Positive n, PseudoRing a) =>
Exp a -> T (Serial n a) (Serial n a)
CausalPS.amplify Exp Real
0.999)
                 (Exp Real -> T (Serial VectorSize Real) (Serial VectorSize Real)
forall n a.
(Positive n, PseudoRing a) =>
Exp a -> T (Serial n a) (Serial n a)
CausalPS.amplify Exp Real
1.001))
      (DSL
  (SampleRate Real
   -> (T (T Real), Real) -> T LazySize (Vector (T VectorSize Real)))
  (Element
     (In
        (SampleRate Real
         -> (T (T Real), Real) -> T LazySize (Vector (T VectorSize Real)))))
  (Element
     (Out
        (SampleRate Real
         -> (T (T Real), Real) -> T LazySize (Vector (T VectorSize Real)))))
-> IO
     (SampleRate Real
      -> (T (T Real), Real) -> T LazySize (Vector (T VectorSize Real)))
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 Real), Real) -> T LazySize (Vector (T VectorSize Real)))
   (Element
      (In
         (SampleRate Real
          -> (T (T Real), Real) -> T LazySize (Vector (T VectorSize Real)))))
   (Element
      (Out
         (SampleRate Real
          -> (T (T Real), Real) -> T LazySize (Vector (T VectorSize Real)))))
 -> IO
      (SampleRate Real
       -> (T (T Real), Real) -> T LazySize (Vector (T VectorSize Real))))
-> DSL
     (SampleRate Real
      -> (T (T Real), Real) -> T LazySize (Vector (T VectorSize Real)))
     (Element
        (In
           (SampleRate Real
            -> (T (T Real), Real) -> T LazySize (Vector (T VectorSize Real)))))
     (Element
        (Out
           (SampleRate Real
            -> (T (T Real), Real) -> T LazySize (Vector (T VectorSize Real)))))
-> IO
     (SampleRate Real
      -> (T (T Real), Real) -> T LazySize (Vector (T VectorSize Real)))
forall a b. (a -> b) -> a -> b
$
       (InputArg (Modulation Real) (Exp Real)
 -> SampleRate (Exp Real) -> T () (Serial VectorSize Real))
-> SampleRate (Exp Real)
-> Unwrapped
     (InputArg (Modulation Real) (Exp Real)
      -> SampleRate (Exp Real) -> T () (Serial VectorSize Real))
forall a f. Wrapped a f => f -> SampleRate a -> Unwrapped f
wrapped ((InputArg (Modulation Real) (Exp Real)
  -> SampleRate (Exp Real) -> T () (Serial VectorSize Real))
 -> SampleRate (Exp Real)
 -> Unwrapped
      (InputArg (Modulation Real) (Exp Real)
       -> SampleRate (Exp Real) -> T () (Serial VectorSize Real)))
-> (InputArg (Modulation Real) (Exp Real)
    -> SampleRate (Exp Real) -> T () (Serial VectorSize Real))
-> SampleRate (Exp Real)
-> Unwrapped
     (InputArg (Modulation Real) (Exp Real)
      -> SampleRate (Exp Real) -> T () (Serial VectorSize Real))
forall a b. (a -> b) -> a -> b
$ \(Modulation T (T (T RealValue))
fm) ->
       (SampleRate (Exp Real) -> Exp Real -> Exp Real)
-> Exp Real
-> (Exp Real
    -> SampleRate (Exp Real) -> T () (Serial VectorSize Real))
-> SampleRate (Exp Real)
-> T () (Serial 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 () (Serial VectorSize Real))
 -> SampleRate (Exp Real) -> T () (Serial VectorSize Real))
-> (Exp Real
    -> SampleRate (Exp Real) -> T () (Serial VectorSize Real))
-> SampleRate (Exp Real)
-> T () (Serial VectorSize Real)
forall a b. (a -> b) -> a -> b
$ \Exp Real
speed SampleRate (Exp Real)
_sr ->
         SignalOf T (Serial VectorSize Real)
-> T () (Serial 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 (Serial VectorSize Real)
 -> T () (Serial VectorSize Real))
-> SignalOf T (Serial VectorSize Real)
-> T () (Serial VectorSize Real)
forall a b. (a -> b) -> a -> b
$ Exp Real -> T (T (T RealValue)) -> T (Serial VectorSize Real)
frequencyFromBendModulation Exp Real
speed T (T (T RealValue))
fm)