{-# OPTIONS_GHC -fno-warn-orphans #-}
{-# Language TypeFamilies, DeriveFunctor, TypeSynonymInstances, FlexibleInstances, MultiParamTypeClasses #-}
module Csound.Sam (
Sample, Sam, Bpm, runSam,
mapBpm, bindSam, bindBpm, liftSam, mapBpm2, bindBpm2, withBpm,
sig1, sig2, infSig1, infSig2, fromSig1, fromSig2, ToSam(..), limSam,
wav, wavr, seg, segr, rndWav, rndWavr, rndSeg, rndSegr, ramWav,
wav1, wavr1, seg1, segr1, rndWav1, rndWavr1, rndSeg1, rndSegr1, ramWav1,
ramLoop, ramRead, segLoop, segRead, relLoop, relRead,
ramLoop1, ramRead1, segLoop1, segRead1, relLoop1, relRead1,
wavScale, wavScale1, drumScale, drumScale1, harmScale, harmScale1,
linEnv, expEnv, hatEnv, decEnv, riseEnv, edecEnv, eriseEnv,
wide, flow, pick, pickBy,
atPan, atPch, atCps, atPanRnd, atVolRnd, atVolGauss,
rep1, rep, pat1, pat, pat', rndPat, rndPat',
Chord,
arpUp, arpDown, arpOneOf, arpFreqOf,
arpUp1, arpDown1, arpOneOf1, arpFreqOf1,
wall, forAirports, genForAirports, arpy,
metroS, toSec,
module Csound.Sam.Ui,
module Csound.Sam.Trig
) where
import Control.Monad.Trans.Class
import Control.Monad.Trans.Reader
import Csound.Base hiding (pitch, tempo, dur)
import Csound.Sam.Core
import Csound.Sam.Ui
import Csound.Sam.Trig
type instance DurOf Sam = Sig
instance Melody Sam where
mel :: [Sam] -> Sam
mel = [Sam] -> Sam
flow
instance Harmony Sam where
=:= :: Sam -> Sam -> Sam
(=:=) = Sam -> Sam -> Sam
forall a. Num a => a -> a -> a
(+)
instance Compose Sam where
instance Delay Sam where
del :: DurOf Sam -> Sam -> Sam
del DurOf Sam
dt = (Sig -> S Sig2 -> S Sig2) -> Sam -> Sam
tfmS ((Sig -> S Sig2 -> S Sig2) -> Sam -> Sam)
-> (Sig -> S Sig2 -> S Sig2) -> Sam -> Sam
forall a b. (a -> b) -> a -> b
$ \Sig
bpm S Sig2
x ->
let absDt :: Sig
absDt = Sig -> Sig -> Sig
toSec Sig
bpm Sig
DurOf Sam
dt
asig :: Sig2
asig = Sig -> Sig2 -> Sig2
forall a. Sigs a => Sig -> a -> a
delaySnd Sig
absDt (Sig2 -> Sig2) -> Sig2 -> Sig2
forall a b. (a -> b) -> a -> b
$ S Sig2 -> Sig2
forall a. S a -> a
samSig S Sig2
x
dur :: Dur
dur = Sig -> Dur -> Dur
addDur Sig
absDt (Dur -> Dur) -> Dur -> Dur
forall a b. (a -> b) -> a -> b
$ S Sig2 -> Dur
forall a. S a -> Dur
samDur S Sig2
x
in S Sig2
x { samSig = asig, samDur = dur }
instance Stretch Sam where
str :: DurOf Sam -> Sam -> Sam
str DurOf Sam
k (Sam ReaderT Sig SE (S Sig2)
a) = ReaderT Sig SE (S Sig2) -> Sam
forall a. ReaderT Sig SE (S a) -> Sample a
Sam (ReaderT Sig SE (S Sig2) -> Sam) -> ReaderT Sig SE (S Sig2) -> Sam
forall a b. (a -> b) -> a -> b
$ (Sig -> Sig) -> ReaderT Sig SE (S Sig2) -> ReaderT Sig SE (S Sig2)
forall r' r (m :: * -> *) a.
(r' -> r) -> ReaderT r m a -> ReaderT r' m a
withReaderT ( DurOf Sam -> DurOf Sam -> DurOf Sam
forall a. Num a => a -> a -> a
* DurOf Sam
k) ReaderT Sig SE (S Sig2)
a
instance Limit Sam where
lim :: DurOf Sam -> Sam -> Sam
lim DurOf Sam
d = (Sig -> S Sig2 -> S Sig2) -> Sam -> Sam
tfmS ((Sig -> S Sig2 -> S Sig2) -> Sam -> Sam)
-> (Sig -> S Sig2 -> S Sig2) -> Sam -> Sam
forall a b. (a -> b) -> a -> b
$ \Sig
bpm S Sig2
x ->
let absD :: Sig
absD = Sig -> Sig -> Sig
toSec Sig
bpm Sig
DurOf Sam
d
in S Sig2
x { samSig = takeSnd absD $ samSig x
, samDur = Dur absD }
instance Loop Sam where
loop :: Sam -> Sam
loop = LoopFun -> Sam -> Sam
genLoop (LoopFun -> Sam -> Sam) -> LoopFun -> Sam -> Sam
forall a b. (a -> b) -> a -> b
$ \Sig
_ Sig
d Sig2
asig -> Sig -> Sig2 -> Sig2
forall a. Sigs a => Sig -> a -> a
repeatSnd Sig
d Sig2
asig
instance Rest Sam where
rest :: DurOf Sam -> Sam
rest DurOf Sam
dt = ReaderT Sig SE (S Sig2) -> Sam
forall a. ReaderT Sig SE (S a) -> Sample a
Sam (ReaderT Sig SE (S Sig2) -> Sam) -> ReaderT Sig SE (S Sig2) -> Sam
forall a b. (a -> b) -> a -> b
$ (Sig -> S Sig2) -> ReaderT Sig SE (S Sig2)
forall (m :: * -> *) r a. Monad m => (r -> a) -> ReaderT r m a
reader ((Sig -> S Sig2) -> ReaderT Sig SE (S Sig2))
-> (Sig -> S Sig2) -> ReaderT Sig SE (S Sig2)
forall a b. (a -> b) -> a -> b
$ \Sig
bpm -> Sig2 -> Dur -> S Sig2
forall a. a -> Dur -> S a
S Sig2
0 (Sig -> Dur
Dur (Sig -> Dur) -> Sig -> Dur
forall a b. (a -> b) -> a -> b
$ Sig -> Sig -> Sig
toSec Sig
bpm Sig
DurOf Sam
dt)
instance At Sig2 Sig2 Sam where
type AtOut Sig2 Sig2 Sam = Sam
at :: (Sig2 -> Sig2) -> Sam -> AtOut Sig2 Sig2 Sam
at Sig2 -> Sig2
f Sam
x = (Sig2 -> Sig2) -> Sam -> Sam
forall a b. (a -> b) -> Sample a -> Sample b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Sig2 -> Sig2
f Sam
x
instance At Sig2 (SE Sig2) Sam where
type AtOut Sig2 (SE Sig2) Sam = Sam
at :: (Sig2 -> SE Sig2) -> Sam -> AtOut Sig2 (SE Sig2) Sam
at Sig2 -> SE Sig2
f Sam
x = (Sig2 -> SE Sig2) -> Sam -> Sam
forall a b. (a -> SE b) -> Sample a -> Sample b
bindSam Sig2 -> SE Sig2
f Sam
x
instance At Sig (SE Sig) Sam where
type AtOut Sig (SE Sig) Sam = Sam
at :: (Sig -> SE Sig) -> Sam -> AtOut Sig (SE Sig) Sam
at Sig -> SE Sig
f Sam
x = Sample (SE Sig2) -> Sam
forall a. Sample (SE a) -> Sample a
liftSam (Sample (SE Sig2) -> Sam) -> Sample (SE Sig2) -> Sam
forall a b. (a -> b) -> a -> b
$ (Sig2 -> SE Sig2) -> Sam -> Sample (SE Sig2)
forall a b. (a -> b) -> Sample a -> Sample b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap ((Sig -> SE Sig) -> Sig2 -> AtOut Sig (SE Sig) Sig2
forall a b c. At a b c => (a -> b) -> c -> AtOut a b c
at Sig -> SE Sig
f) Sam
x
instance At Sig Sig2 Sam where
type AtOut Sig Sig2 Sam = Sam
at :: (Sig -> Sig2) -> Sam -> AtOut Sig Sig2 Sam
at Sig -> Sig2
f Sam
x = (Sig2 -> Sig2) -> Sam -> AtOut Sig2 Sig2 Sam
forall a b c. At a b c => (a -> b) -> c -> AtOut a b c
at Sig2 -> Sig2
phi Sam
x
where
phi :: Sig2 -> Sig2
phi (Sig
a, Sig
b) = Sig2
0.5 Sig2 -> Sig2 -> Sig2
forall a. Num a => a -> a -> a
* (Sig -> Sig2
f Sig
a Sig2 -> Sig2 -> Sig2
forall a. Num a => a -> a -> a
+ Sig -> Sig2
f Sig
b)
instance At Sig (SE Sig2) Sam where
type AtOut Sig (SE Sig2) Sam = Sam
at :: (Sig -> SE Sig2) -> Sam -> AtOut Sig (SE Sig2) Sam
at Sig -> SE Sig2
f Sam
x = (Sig2 -> SE Sig2) -> Sam -> AtOut Sig2 (SE Sig2) Sam
forall a b c. At a b c => (a -> b) -> c -> AtOut a b c
at Sig2 -> SE Sig2
phi Sam
x
where
phi :: Sig2 -> SE Sig2
phi (Sig
a, Sig
b) = do
Sig2
a' <- Sig -> SE Sig2
f Sig
a
Sig2
b' <- Sig -> SE Sig2
f Sig
b
Sig2 -> SE Sig2
forall a. a -> SE a
forall (m :: * -> *) a. Monad m => a -> m a
return (Sig2 -> SE Sig2) -> Sig2 -> SE Sig2
forall a b. (a -> b) -> a -> b
$ Sig2
0.5 Sig2 -> Sig2 -> Sig2
forall a. Num a => a -> a -> a
* (Sig2
a' Sig2 -> Sig2 -> Sig2
forall a. Num a => a -> a -> a
+ Sig2
b')
instance MixAt Sig2 Sig2 Sam where
mixAt :: Sig -> (Sig2 -> Sig2) -> Sam -> AtOut Sig2 Sig2 Sam
mixAt Sig
k Sig2 -> Sig2
f Sam
sam = (Sig2 -> Sig2) -> Sam -> AtOut Sig2 Sig2 Sam
forall a b c. At a b c => (a -> b) -> c -> AtOut a b c
at (\Sig2
x -> Sig -> Sig2 -> Sig2 -> Sig2
forall a. (Num a, SigSpace a) => Sig -> a -> a -> a
cfd Sig
k Sig2
x (Sig2 -> Sig2
f Sig2
x)) Sam
sam
instance MixAt Sig2 (SE Sig2) Sam where
mixAt :: Sig -> (Sig2 -> SE Sig2) -> Sam -> AtOut Sig2 (SE Sig2) Sam
mixAt Sig
k Sig2 -> SE Sig2
f Sam
sam = (Sig2 -> SE Sig2) -> Sam -> AtOut Sig2 (SE Sig2) Sam
forall a b c. At a b c => (a -> b) -> c -> AtOut a b c
at (\Sig2
x -> (Sig2 -> Sig2) -> SE Sig2 -> SE Sig2
forall a b. (a -> b) -> SE a -> SE b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (Sig -> Sig2 -> Sig2 -> Sig2
forall a. (Num a, SigSpace a) => Sig -> a -> a -> a
cfd Sig
k Sig2
x) (Sig2 -> SE Sig2
f Sig2
x)) Sam
sam
instance MixAt Sig (SE Sig) Sam where
mixAt :: Sig -> (Sig -> SE Sig) -> Sam -> AtOut Sig (SE Sig) Sam
mixAt Sig
k Sig -> SE Sig
f Sam
sam = (Sig -> SE Sig) -> Sam -> AtOut Sig (SE Sig) Sam
forall a b c. At a b c => (a -> b) -> c -> AtOut a b c
at (\Sig
x -> (Sig -> Sig) -> SE Sig -> SE Sig
forall a b. (a -> b) -> SE a -> SE b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (Sig -> Sig -> Sig -> Sig
forall a. (Num a, SigSpace a) => Sig -> a -> a -> a
cfd Sig
k Sig
x) (Sig -> SE Sig
f Sig
x)) Sam
sam
instance MixAt Sig Sig2 Sam where
mixAt :: Sig -> (Sig -> Sig2) -> Sam -> AtOut Sig Sig2 Sam
mixAt Sig
k Sig -> Sig2
f Sam
sam = (Sig -> Sig2) -> Sam -> AtOut Sig Sig2 Sam
forall a b c. At a b c => (a -> b) -> c -> AtOut a b c
at (\Sig
x -> Sig -> Sig2 -> Sig2 -> Sig2
forall a. (Num a, SigSpace a) => Sig -> a -> a -> a
cfd Sig
k (Sig
x, Sig
x) (Sig -> Sig2
f Sig
x)) Sam
sam
instance MixAt Sig (SE Sig2) Sam where
mixAt :: Sig -> (Sig -> SE Sig2) -> Sam -> AtOut Sig (SE Sig2) Sam
mixAt Sig
k Sig -> SE Sig2
f Sam
sam = (Sig -> SE Sig2) -> Sam -> AtOut Sig (SE Sig2) Sam
forall a b c. At a b c => (a -> b) -> c -> AtOut a b c
at (\Sig
x -> (Sig2 -> Sig2) -> SE Sig2 -> SE Sig2
forall a b. (a -> b) -> SE a -> SE b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (Sig -> Sig2 -> Sig2 -> Sig2
forall a. (Num a, SigSpace a) => Sig -> a -> a -> a
cfd Sig
k (Sig
x, Sig
x)) (Sig -> SE Sig2
f Sig
x)) Sam
sam
infSig1 :: Sig -> Sam
infSig1 :: Sig -> Sam
infSig1 Sig
x = Sig2 -> Sam
forall a. a -> Sample a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Sig
x, Sig
x)
infSig2 :: Sig2 -> Sam
infSig2 :: Sig2 -> Sam
infSig2 = Sig2 -> Sam
forall a. a -> Sample a
forall (f :: * -> *) a. Applicative f => a -> f a
pure
sig1 :: Sig -> Sig -> Sam
sig1 :: Sig -> Sig -> Sam
sig1 Sig
dt Sig
a = ReaderT Sig SE (S Sig2) -> Sam
forall a. ReaderT Sig SE (S a) -> Sample a
Sam (ReaderT Sig SE (S Sig2) -> Sam) -> ReaderT Sig SE (S Sig2) -> Sam
forall a b. (a -> b) -> a -> b
$ (Sig -> S Sig2) -> ReaderT Sig SE (S Sig2)
forall (m :: * -> *) r a. Monad m => (r -> a) -> ReaderT r m a
reader ((Sig -> S Sig2) -> ReaderT Sig SE (S Sig2))
-> (Sig -> S Sig2) -> ReaderT Sig SE (S Sig2)
forall a b. (a -> b) -> a -> b
$ \Sig
_ -> Sig2 -> Dur -> S Sig2
forall a. a -> Dur -> S a
S (Sig
a, Sig
a) (Sig -> Dur
Dur Sig
dt)
sig2 :: Sig -> Sig2 -> Sam
sig2 :: Sig -> Sig2 -> Sam
sig2 Sig
dt Sig2
a = ReaderT Sig SE (S Sig2) -> Sam
forall a. ReaderT Sig SE (S a) -> Sample a
Sam (ReaderT Sig SE (S Sig2) -> Sam) -> ReaderT Sig SE (S Sig2) -> Sam
forall a b. (a -> b) -> a -> b
$ (Sig -> S Sig2) -> ReaderT Sig SE (S Sig2)
forall (m :: * -> *) r a. Monad m => (r -> a) -> ReaderT r m a
reader ((Sig -> S Sig2) -> ReaderT Sig SE (S Sig2))
-> (Sig -> S Sig2) -> ReaderT Sig SE (S Sig2)
forall a b. (a -> b) -> a -> b
$ \Sig
_ -> Sig2 -> Dur -> S Sig2
forall a. a -> Dur -> S a
S Sig2
a (Sig -> Dur
Dur Sig
dt)
fromSig1 :: Sig -> Sig -> Sam
fromSig1 :: Sig -> Sig -> Sam
fromSig1 Sig
dt = DurOf Sam -> Sam -> Sam
forall a. Limit a => DurOf a -> a -> a
lim Sig
DurOf Sam
dt (Sam -> Sam) -> (Sig -> Sam) -> Sig -> Sam
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Sig -> Sam
infSig1
fromSig2 :: Sig -> Sig2 -> Sam
fromSig2 :: Sig -> Sig2 -> Sam
fromSig2 Sig
dt = DurOf Sam -> Sam -> Sam
forall a. Limit a => DurOf a -> a -> a
lim Sig
DurOf Sam
dt (Sam -> Sam) -> (Sig2 -> Sam) -> Sig2 -> Sam
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Sig2 -> Sam
infSig2
wav :: String -> Sam
wav :: String -> Sam
wav String
fileName = ReaderT Sig SE (S Sig2) -> Sam
forall a. ReaderT Sig SE (S a) -> Sample a
Sam (ReaderT Sig SE (S Sig2) -> Sam) -> ReaderT Sig SE (S Sig2) -> Sam
forall a b. (a -> b) -> a -> b
$ S Sig2 -> ReaderT Sig SE (S Sig2)
forall a. a -> ReaderT Sig SE a
forall (m :: * -> *) a. Monad m => a -> m a
return (S Sig2 -> ReaderT Sig SE (S Sig2))
-> S Sig2 -> ReaderT Sig SE (S Sig2)
forall a b. (a -> b) -> a -> b
$ Sig2 -> Dur -> S Sig2
forall a. a -> Dur -> S a
S (String -> Sig2
readSnd String
fileName) (Sig -> Dur
Dur (Sig -> Dur) -> Sig -> Dur
forall a b. (a -> b) -> a -> b
$ D -> Sig
sig (D -> Sig) -> D -> Sig
forall a b. (a -> b) -> a -> b
$ String -> D
lengthSnd String
fileName)
wavr :: String -> Sam
wavr :: String -> Sam
wavr String
fileName = ReaderT Sig SE (S Sig2) -> Sam
forall a. ReaderT Sig SE (S a) -> Sample a
Sam (ReaderT Sig SE (S Sig2) -> Sam) -> ReaderT Sig SE (S Sig2) -> Sam
forall a b. (a -> b) -> a -> b
$ S Sig2 -> ReaderT Sig SE (S Sig2)
forall a. a -> ReaderT Sig SE a
forall (m :: * -> *) a. Monad m => a -> m a
return (S Sig2 -> ReaderT Sig SE (S Sig2))
-> S Sig2 -> ReaderT Sig SE (S Sig2)
forall a b. (a -> b) -> a -> b
$ Sig2 -> Dur -> S Sig2
forall a. a -> Dur -> S a
S (Sig -> Sig2 -> Sig2
forall a. Sigs a => Sig -> a -> a
takeSnd (D -> Sig
sig D
len) (Sig2 -> Sig2) -> Sig2 -> Sig2
forall a b. (a -> b) -> a -> b
$ Sig -> String -> Sig2
loopWav (-Sig
1) String
fileName) (Sig -> Dur
Dur (Sig -> Dur) -> Sig -> Dur
forall a b. (a -> b) -> a -> b
$ D -> Sig
sig D
len)
where len :: D
len = String -> D
lengthSnd String
fileName
seg :: D -> D -> String -> Sam
seg :: D -> D -> String -> Sam
seg D
start D
end String
fileName = ReaderT Sig SE (S Sig2) -> Sam
forall a. ReaderT Sig SE (S a) -> Sample a
Sam (ReaderT Sig SE (S Sig2) -> Sam) -> ReaderT Sig SE (S Sig2) -> Sam
forall a b. (a -> b) -> a -> b
$ S Sig2 -> ReaderT Sig SE (S Sig2)
forall a. a -> ReaderT Sig SE a
forall (m :: * -> *) a. Monad m => a -> m a
return (S Sig2 -> ReaderT Sig SE (S Sig2))
-> S Sig2 -> ReaderT Sig SE (S Sig2)
forall a b. (a -> b) -> a -> b
$ Sig2 -> Dur -> S Sig2
forall a. a -> Dur -> S a
S (D -> D -> Sig -> String -> Sig2
readSegWav D
start D
end Sig
1 String
fileName) (Sig -> Dur
Dur (Sig -> Dur) -> Sig -> Dur
forall a b. (a -> b) -> a -> b
$ D -> Sig
sig D
len)
where len :: D
len = D
end D -> D -> D
forall a. Num a => a -> a -> a
- D
start
segr :: D -> D -> String -> Sam
segr :: D -> D -> String -> Sam
segr D
start D
end String
fileName = ReaderT Sig SE (S Sig2) -> Sam
forall a. ReaderT Sig SE (S a) -> Sample a
Sam (ReaderT Sig SE (S Sig2) -> Sam) -> ReaderT Sig SE (S Sig2) -> Sam
forall a b. (a -> b) -> a -> b
$ S Sig2 -> ReaderT Sig SE (S Sig2)
forall a. a -> ReaderT Sig SE a
forall (m :: * -> *) a. Monad m => a -> m a
return (S Sig2 -> ReaderT Sig SE (S Sig2))
-> S Sig2 -> ReaderT Sig SE (S Sig2)
forall a b. (a -> b) -> a -> b
$ Sig2 -> Dur -> S Sig2
forall a. a -> Dur -> S a
S (D -> D -> Sig -> String -> Sig2
readSegWav D
start D
end (-Sig
1) String
fileName) (Sig -> Dur
Dur (Sig -> Dur) -> Sig -> Dur
forall a b. (a -> b) -> a -> b
$ D -> Sig
sig D
len)
where len :: D
len = D
end D -> D -> D
forall a. Num a => a -> a -> a
- D
start
rndWav :: D -> String -> Sam
rndWav :: D -> String -> Sam
rndWav D
dt String
fileName = D -> D -> D -> String -> Sam
rndSeg D
dt D
0 (String -> D
lengthSnd String
fileName) String
fileName
rndWavr :: D -> String -> Sam
rndWavr :: D -> String -> Sam
rndWavr D
dt String
fileName = D -> D -> D -> String -> Sam
rndSegr D
dt D
0 (String -> D
lengthSnd String
fileName) String
fileName
rndSeg :: D -> D -> D -> String -> Sam
rndSeg :: D -> D -> D -> String -> Sam
rndSeg = Sig -> D -> D -> D -> String -> Sam
genRndSeg Sig
1
rndSegr :: D -> D -> D -> String -> Sam
rndSegr :: D -> D -> D -> String -> Sam
rndSegr = Sig -> D -> D -> D -> String -> Sam
genRndSeg (-Sig
1)
genRndSeg :: Sig -> D -> D -> D -> String -> Sam
genRndSeg :: Sig -> D -> D -> D -> String -> Sam
genRndSeg Sig
speed D
len D
start D
end String
fileName = ReaderT Sig SE (S Sig2) -> Sam
forall a. ReaderT Sig SE (S a) -> Sample a
Sam (ReaderT Sig SE (S Sig2) -> Sam) -> ReaderT Sig SE (S Sig2) -> Sam
forall a b. (a -> b) -> a -> b
$ SE (S Sig2) -> ReaderT Sig SE (S Sig2)
forall (m :: * -> *) a. Monad m => m a -> ReaderT Sig m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (SE (S Sig2) -> ReaderT Sig SE (S Sig2))
-> SE (S Sig2) -> ReaderT Sig SE (S Sig2)
forall a b. (a -> b) -> a -> b
$ do
D
x <- D -> D -> SE D
forall a. SigOrD a => a -> a -> SE a
random D
0 D
1
let a :: D
a = D
start D -> D -> D
forall a. Num a => a -> a -> a
+ D
dl D -> D -> D
forall a. Num a => a -> a -> a
* D
x
let b :: D
b = D
a D -> D -> D
forall a. Num a => a -> a -> a
+ D
len
S Sig2 -> SE (S Sig2)
forall a. a -> SE a
forall (m :: * -> *) a. Monad m => a -> m a
return (S Sig2 -> SE (S Sig2)) -> S Sig2 -> SE (S Sig2)
forall a b. (a -> b) -> a -> b
$ Sig2 -> Dur -> S Sig2
forall a. a -> Dur -> S a
S (D -> D -> Sig -> String -> Sig2
readSegWav D
a D
b Sig
speed String
fileName) (Sig -> Dur
Dur (Sig -> Dur) -> Sig -> Dur
forall a b. (a -> b) -> a -> b
$ D -> Sig
sig D
len)
where dl :: D
dl = D
end D -> D -> D
forall a. Num a => a -> a -> a
- D
len
ramWav :: LoopMode -> Sig -> String -> Sam
ramWav :: LoopMode -> Sig -> String -> Sam
ramWav LoopMode
loopMode Sig
speed String
fileName = ReaderT Sig SE (S Sig2) -> Sam
forall a. ReaderT Sig SE (S a) -> Sample a
Sam (ReaderT Sig SE (S Sig2) -> Sam) -> ReaderT Sig SE (S Sig2) -> Sam
forall a b. (a -> b) -> a -> b
$ S Sig2 -> ReaderT Sig SE (S Sig2)
forall a. a -> ReaderT Sig SE a
forall (m :: * -> *) a. Monad m => a -> m a
return (S Sig2 -> ReaderT Sig SE (S Sig2))
-> S Sig2 -> ReaderT Sig SE (S Sig2)
forall a b. (a -> b) -> a -> b
$ Sig2 -> Dur -> S Sig2
forall a. a -> Dur -> S a
S (LoopMode -> Sig -> String -> Sig2
ramSnd LoopMode
loopMode Sig
speed String
fileName) (Sig -> Dur
Dur (Sig -> Dur) -> Sig -> Dur
forall a b. (a -> b) -> a -> b
$ D -> Sig
sig (D -> Sig) -> D -> Sig
forall a b. (a -> b) -> a -> b
$ String -> D
lengthSnd String
fileName)
ramWav1 :: LoopMode -> Sig -> String -> Sam
ramWav1 :: LoopMode -> Sig -> String -> Sam
ramWav1 LoopMode
loopMode Sig
speed String
fileName = ReaderT Sig SE (S Sig2) -> Sam
forall a. ReaderT Sig SE (S a) -> Sample a
Sam (ReaderT Sig SE (S Sig2) -> Sam) -> ReaderT Sig SE (S Sig2) -> Sam
forall a b. (a -> b) -> a -> b
$ S Sig2 -> ReaderT Sig SE (S Sig2)
forall a. a -> ReaderT Sig SE a
forall (m :: * -> *) a. Monad m => a -> m a
return (S Sig2 -> ReaderT Sig SE (S Sig2))
-> S Sig2 -> ReaderT Sig SE (S Sig2)
forall a b. (a -> b) -> a -> b
$ Sig2 -> Dur -> S Sig2
forall a. a -> Dur -> S a
S (let x :: Sig
x = LoopMode -> Sig -> String -> Sig
ramSnd1 LoopMode
loopMode Sig
speed String
fileName in (Sig
x, Sig
x)) (Sig -> Dur
Dur (Sig -> Dur) -> Sig -> Dur
forall a b. (a -> b) -> a -> b
$ D -> Sig
sig (D -> Sig) -> D -> Sig
forall a b. (a -> b) -> a -> b
$ String -> D
lengthSnd String
fileName)
wav1 :: String -> Sam
wav1 :: String -> Sam
wav1 String
fileName = ReaderT Sig SE (S Sig2) -> Sam
forall a. ReaderT Sig SE (S a) -> Sample a
Sam (ReaderT Sig SE (S Sig2) -> Sam) -> ReaderT Sig SE (S Sig2) -> Sam
forall a b. (a -> b) -> a -> b
$ S Sig2 -> ReaderT Sig SE (S Sig2)
forall a. a -> ReaderT Sig SE a
forall (m :: * -> *) a. Monad m => a -> m a
return (S Sig2 -> ReaderT Sig SE (S Sig2))
-> S Sig2 -> ReaderT Sig SE (S Sig2)
forall a b. (a -> b) -> a -> b
$ Sig2 -> Dur -> S Sig2
forall a. a -> Dur -> S a
S (let x :: Sig
x = String -> Sig
readSnd1 String
fileName in (Sig
x, Sig
x)) (Sig -> Dur
Dur (Sig -> Dur) -> Sig -> Dur
forall a b. (a -> b) -> a -> b
$ D -> Sig
sig (D -> Sig) -> D -> Sig
forall a b. (a -> b) -> a -> b
$ String -> D
lengthSnd String
fileName)
wavr1 :: String -> Sam
wavr1 :: String -> Sam
wavr1 String
fileName = ReaderT Sig SE (S Sig2) -> Sam
forall a. ReaderT Sig SE (S a) -> Sample a
Sam (ReaderT Sig SE (S Sig2) -> Sam) -> ReaderT Sig SE (S Sig2) -> Sam
forall a b. (a -> b) -> a -> b
$ S Sig2 -> ReaderT Sig SE (S Sig2)
forall a. a -> ReaderT Sig SE a
forall (m :: * -> *) a. Monad m => a -> m a
return (S Sig2 -> ReaderT Sig SE (S Sig2))
-> S Sig2 -> ReaderT Sig SE (S Sig2)
forall a b. (a -> b) -> a -> b
$ Sig2 -> Dur -> S Sig2
forall a. a -> Dur -> S a
S (let x :: Sig
x = Sig -> Sig -> Sig
forall a. Sigs a => Sig -> a -> a
takeSnd (D -> Sig
sig D
len) (Sig -> Sig) -> Sig -> Sig
forall a b. (a -> b) -> a -> b
$ Sig -> String -> Sig
loopWav1 (-Sig
1) String
fileName in (Sig
x, Sig
x)) (Sig -> Dur
Dur (Sig -> Dur) -> Sig -> Dur
forall a b. (a -> b) -> a -> b
$ D -> Sig
sig D
len)
where len :: D
len = String -> D
lengthSnd String
fileName
seg1 :: D -> D -> String -> Sam
seg1 :: D -> D -> String -> Sam
seg1 D
start D
end String
fileName = ReaderT Sig SE (S Sig2) -> Sam
forall a. ReaderT Sig SE (S a) -> Sample a
Sam (ReaderT Sig SE (S Sig2) -> Sam) -> ReaderT Sig SE (S Sig2) -> Sam
forall a b. (a -> b) -> a -> b
$ S Sig2 -> ReaderT Sig SE (S Sig2)
forall a. a -> ReaderT Sig SE a
forall (m :: * -> *) a. Monad m => a -> m a
return (S Sig2 -> ReaderT Sig SE (S Sig2))
-> S Sig2 -> ReaderT Sig SE (S Sig2)
forall a b. (a -> b) -> a -> b
$ Sig2 -> Dur -> S Sig2
forall a. a -> Dur -> S a
S (let x :: Sig
x = D -> D -> Sig -> String -> Sig
readSegWav1 D
start D
end Sig
1 String
fileName in (Sig
x, Sig
x)) (Sig -> Dur
Dur (Sig -> Dur) -> Sig -> Dur
forall a b. (a -> b) -> a -> b
$ D -> Sig
sig D
len)
where len :: D
len = D
end D -> D -> D
forall a. Num a => a -> a -> a
- D
start
segr1 :: D -> D -> String -> Sam
segr1 :: D -> D -> String -> Sam
segr1 D
start D
end String
fileName = ReaderT Sig SE (S Sig2) -> Sam
forall a. ReaderT Sig SE (S a) -> Sample a
Sam (ReaderT Sig SE (S Sig2) -> Sam) -> ReaderT Sig SE (S Sig2) -> Sam
forall a b. (a -> b) -> a -> b
$ S Sig2 -> ReaderT Sig SE (S Sig2)
forall a. a -> ReaderT Sig SE a
forall (m :: * -> *) a. Monad m => a -> m a
return (S Sig2 -> ReaderT Sig SE (S Sig2))
-> S Sig2 -> ReaderT Sig SE (S Sig2)
forall a b. (a -> b) -> a -> b
$ Sig2 -> Dur -> S Sig2
forall a. a -> Dur -> S a
S (let x :: Sig
x = D -> D -> Sig -> String -> Sig
readSegWav1 D
start D
end (-Sig
1) String
fileName in (Sig
x, Sig
x)) (Sig -> Dur
Dur (Sig -> Dur) -> Sig -> Dur
forall a b. (a -> b) -> a -> b
$ D -> Sig
sig D
len)
where len :: D
len = D
end D -> D -> D
forall a. Num a => a -> a -> a
- D
start
rndWav1 :: D -> String -> Sam
rndWav1 :: D -> String -> Sam
rndWav1 D
dt String
fileName = D -> D -> D -> String -> Sam
rndSeg1 D
dt D
0 (String -> D
lengthSnd String
fileName) String
fileName
rndWavr1 :: D -> String -> Sam
rndWavr1 :: D -> String -> Sam
rndWavr1 D
dt String
fileName = D -> D -> D -> String -> Sam
rndSegr1 D
dt D
0 (String -> D
lengthSnd String
fileName) String
fileName
rndSeg1 :: D -> D -> D -> String -> Sam
rndSeg1 :: D -> D -> D -> String -> Sam
rndSeg1 = Sig -> D -> D -> D -> String -> Sam
genRndSeg1 Sig
1
rndSegr1 :: D -> D -> D -> String -> Sam
rndSegr1 :: D -> D -> D -> String -> Sam
rndSegr1 = Sig -> D -> D -> D -> String -> Sam
genRndSeg1 (-Sig
1)
genRndSeg1 :: Sig -> D -> D -> D -> String -> Sam
genRndSeg1 :: Sig -> D -> D -> D -> String -> Sam
genRndSeg1 Sig
speed D
len D
start D
end String
fileName = ReaderT Sig SE (S Sig2) -> Sam
forall a. ReaderT Sig SE (S a) -> Sample a
Sam (ReaderT Sig SE (S Sig2) -> Sam) -> ReaderT Sig SE (S Sig2) -> Sam
forall a b. (a -> b) -> a -> b
$ SE (S Sig2) -> ReaderT Sig SE (S Sig2)
forall (m :: * -> *) a. Monad m => m a -> ReaderT Sig m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (SE (S Sig2) -> ReaderT Sig SE (S Sig2))
-> SE (S Sig2) -> ReaderT Sig SE (S Sig2)
forall a b. (a -> b) -> a -> b
$ do
D
x <- D -> D -> SE D
forall a. SigOrD a => a -> a -> SE a
random D
0 D
1
let a :: D
a = D
start D -> D -> D
forall a. Num a => a -> a -> a
+ D
dl D -> D -> D
forall a. Num a => a -> a -> a
* D
x
let b :: D
b = D
a D -> D -> D
forall a. Num a => a -> a -> a
+ D
len
S Sig2 -> SE (S Sig2)
forall a. a -> SE a
forall (m :: * -> *) a. Monad m => a -> m a
return (S Sig2 -> SE (S Sig2)) -> S Sig2 -> SE (S Sig2)
forall a b. (a -> b) -> a -> b
$ Sig2 -> Dur -> S Sig2
forall a. a -> Dur -> S a
S (let y :: Sig
y = D -> D -> Sig -> String -> Sig
readSegWav1 D
a D
b Sig
speed String
fileName in (Sig
y, Sig
y)) (Sig -> Dur
Dur (Sig -> Dur) -> Sig -> Dur
forall a b. (a -> b) -> a -> b
$ D -> Sig
sig D
len)
where dl :: D
dl = D
end D -> D -> D
forall a. Num a => a -> a -> a
- D
len
toSec :: Bpm -> Sig -> Sig
toSec :: Sig -> Sig -> Sig
toSec Sig
bpm Sig
a = Sig
a Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
60 Sig -> Sig -> Sig
forall a. Fractional a => a -> a -> a
/ Sig
bpm
toSecD :: Bpm -> D -> D
toSecD :: Sig -> D -> D
toSecD Sig
bpm D
a = D
a D -> D -> D
forall a. Num a => a -> a -> a
* D
60 D -> D -> D
forall a. Fractional a => a -> a -> a
/ (Sig -> D
ir Sig
bpm)
addDur :: Sig -> Dur -> Dur
addDur :: Sig -> Dur -> Dur
addDur Sig
d Dur
x = case Dur
x of
Dur Sig
a -> Sig -> Dur
Dur (Sig -> Dur) -> Sig -> Dur
forall a b. (a -> b) -> a -> b
$ Sig
d Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
+ Sig
a
Dur
InfDur -> Dur
InfDur
atPch :: Sig -> Sam -> Sam
atPch :: Sig -> Sam -> Sam
atPch Sig
k = (Sig -> Sig) -> Sam -> Sam
forall a. SigSpace a => (Sig -> Sig) -> a -> a
mapSig (Sig -> Sig -> Sig
scalePitch Sig
k)
atPan :: Sig -> Sam -> Sam
atPan :: Sig -> Sam -> Sam
atPan Sig
k = (Sig2 -> Sig2) -> Sam -> Sam
forall a b. (a -> b) -> Sample a -> Sample b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (\(Sig
a, Sig
b) -> Sig -> Sig -> Sig2
pan2 ([Sig] -> Sig
forall a. Fractional a => [a] -> a
mean [Sig
a, Sig
b]) Sig
k)
atCps :: Sig -> Sam -> Sam
atCps :: Sig -> Sam -> Sam
atCps Sig
k = (Sig -> Sig) -> Sam -> Sam
forall a. SigSpace a => (Sig -> Sig) -> a -> a
mapSig (Sig -> Sig -> Sig
scaleSpec Sig
k)
tfmBy :: (S Sig2 -> Sig2) -> Sam -> Sam
tfmBy :: (S Sig2 -> Sig2) -> Sam -> Sam
tfmBy S Sig2 -> Sig2
f = ReaderT Sig SE (S Sig2) -> Sam
forall a. ReaderT Sig SE (S a) -> Sample a
Sam (ReaderT Sig SE (S Sig2) -> Sam)
-> (Sam -> ReaderT Sig SE (S Sig2)) -> Sam -> Sam
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (S Sig2 -> S Sig2)
-> ReaderT Sig SE (S Sig2) -> ReaderT Sig SE (S Sig2)
forall a b. (a -> b) -> ReaderT Sig SE a -> ReaderT Sig SE b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (\S Sig2
x -> S Sig2
x { samSig = f x }) (ReaderT Sig SE (S Sig2) -> ReaderT Sig SE (S Sig2))
-> (Sam -> ReaderT Sig SE (S Sig2))
-> Sam
-> ReaderT Sig SE (S Sig2)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Sam -> ReaderT Sig SE (S Sig2)
forall a. Sample a -> ReaderT Sig SE (S a)
unSam
tfmS :: (Bpm -> S Sig2 -> S Sig2) -> Sam -> Sam
tfmS :: (Sig -> S Sig2 -> S Sig2) -> Sam -> Sam
tfmS Sig -> S Sig2 -> S Sig2
f Sam
ra = ReaderT Sig SE (S Sig2) -> Sam
forall a. ReaderT Sig SE (S a) -> Sample a
Sam (ReaderT Sig SE (S Sig2) -> Sam) -> ReaderT Sig SE (S Sig2) -> Sam
forall a b. (a -> b) -> a -> b
$ do
Sig
bpm <- ReaderT Sig SE Sig
forall (m :: * -> *) r. Monad m => ReaderT r m r
ask
S Sig2
a <- Sam -> ReaderT Sig SE (S Sig2)
forall a. Sample a -> ReaderT Sig SE (S a)
unSam Sam
ra
S Sig2 -> ReaderT Sig SE (S Sig2)
forall a. a -> ReaderT Sig SE a
forall (m :: * -> *) a. Monad m => a -> m a
return (S Sig2 -> ReaderT Sig SE (S Sig2))
-> S Sig2 -> ReaderT Sig SE (S Sig2)
forall a b. (a -> b) -> a -> b
$ Sig -> S Sig2 -> S Sig2
f Sig
bpm S Sig2
a
setInfDur :: Sam -> Sam
setInfDur :: Sam -> Sam
setInfDur = ReaderT Sig SE (S Sig2) -> Sam
forall a. ReaderT Sig SE (S a) -> Sample a
Sam (ReaderT Sig SE (S Sig2) -> Sam)
-> (Sam -> ReaderT Sig SE (S Sig2)) -> Sam -> Sam
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (S Sig2 -> S Sig2)
-> ReaderT Sig SE (S Sig2) -> ReaderT Sig SE (S Sig2)
forall a b. (a -> b) -> ReaderT Sig SE a -> ReaderT Sig SE b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (\S Sig2
a -> S Sig2
a { samDur = InfDur }) (ReaderT Sig SE (S Sig2) -> ReaderT Sig SE (S Sig2))
-> (Sam -> ReaderT Sig SE (S Sig2))
-> Sam
-> ReaderT Sig SE (S Sig2)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Sam -> ReaderT Sig SE (S Sig2)
forall a. Sample a -> ReaderT Sig SE (S a)
unSam
wide :: Sig -> Sam -> Sam
wide :: Sig -> Sam -> Sam
wide = Sig -> Sam -> Sam
DurOf Sam -> Sam -> Sam
forall a. Stretch a => DurOf a -> a -> a
str (Sig -> Sam -> Sam) -> (Sig -> Sig) -> Sig -> Sam -> Sam
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Sig -> Sig
forall a. Fractional a => a -> a
recip
flow :: [Sam] -> Sam
flow :: [Sam] -> Sam
flow [] = Sam
0
flow [Sam]
as = (Sam -> Sam -> Sam) -> [Sam] -> Sam
forall a. (a -> a -> a) -> [a] -> a
forall (t :: * -> *) a. Foldable t => (a -> a -> a) -> t a -> a
foldr1 Sam -> Sam -> Sam
flow2 [Sam]
as
flow2 :: Sam -> Sam -> Sam
flow2 :: Sam -> Sam -> Sam
flow2 (Sam ReaderT Sig SE (S Sig2)
ra) (Sam ReaderT Sig SE (S Sig2)
rb) = ReaderT Sig SE (S Sig2) -> Sam
forall a. ReaderT Sig SE (S a) -> Sample a
Sam (ReaderT Sig SE (S Sig2) -> Sam) -> ReaderT Sig SE (S Sig2) -> Sam
forall a b. (a -> b) -> a -> b
$ do
S Sig2
a <- ReaderT Sig SE (S Sig2)
ra
S Sig2
b <- ReaderT Sig SE (S Sig2)
rb
let sa :: Sig2
sa = S Sig2 -> Sig2
forall a. S a -> a
samSig S Sig2
a
let sb :: Sig2
sb = S Sig2 -> Sig2
forall a. S a -> a
samSig S Sig2
b
S Sig2 -> ReaderT Sig SE (S Sig2)
forall a. a -> ReaderT Sig SE a
forall (m :: * -> *) a. Monad m => a -> m a
return (S Sig2 -> ReaderT Sig SE (S Sig2))
-> S Sig2 -> ReaderT Sig SE (S Sig2)
forall a b. (a -> b) -> a -> b
$ case (S Sig2 -> Dur
forall a. S a -> Dur
samDur S Sig2
a, S Sig2 -> Dur
forall a. S a -> Dur
samDur S Sig2
b) of
(Dur Sig
da, Dur Sig
db) -> Sig2 -> Dur -> S Sig2
forall a. a -> Dur -> S a
S (Sig2
sa Sig2 -> Sig2 -> Sig2
forall a. Num a => a -> a -> a
+ Sig -> Sig2 -> Sig2
forall a. Sigs a => Sig -> a -> a
delaySnd Sig
da Sig2
sb) (Sig -> Dur
Dur (Sig -> Dur) -> Sig -> Dur
forall a b. (a -> b) -> a -> b
$ Sig
da Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
+ Sig
db)
(Dur
InfDur, Dur
_) -> S Sig2
a
(Dur Sig
da, Dur
InfDur) -> Sig2 -> Dur -> S Sig2
forall a. a -> Dur -> S a
S (Sig2
sa Sig2 -> Sig2 -> Sig2
forall a. Num a => a -> a -> a
+ Sig -> Sig2 -> Sig2
forall a. Sigs a => Sig -> a -> a
delaySnd Sig
da Sig2
sb) Dur
InfDur
type PickFun = [(D, D)] -> Evt Unit -> Evt (D, D)
genPick :: PickFun -> Sig -> [Sam] -> Sam
genPick :: PickFun -> Sig -> [Sam] -> Sam
genPick PickFun
pickFun Sig
dtSig [Sam]
as = ReaderT Sig SE (S Sig2) -> Sam
forall a. ReaderT Sig SE (S a) -> Sample a
Sam (ReaderT Sig SE (S Sig2) -> Sam) -> ReaderT Sig SE (S Sig2) -> Sam
forall a b. (a -> b) -> a -> b
$ do
Sig
bpm <- ReaderT Sig SE Sig
forall (m :: * -> *) r. Monad m => ReaderT r m r
ask
[S Sig2]
xs <- [ReaderT Sig SE (S Sig2)] -> ReaderT Sig SE [S Sig2]
forall (t :: * -> *) (m :: * -> *) a.
(Traversable t, Monad m) =>
t (m a) -> m (t a)
forall (m :: * -> *) a. Monad m => [m a] -> m [a]
sequence ([ReaderT Sig SE (S Sig2)] -> ReaderT Sig SE [S Sig2])
-> [ReaderT Sig SE (S Sig2)] -> ReaderT Sig SE [S Sig2]
forall a b. (a -> b) -> a -> b
$ (Sam -> ReaderT Sig SE (S Sig2))
-> [Sam] -> [ReaderT Sig SE (S Sig2)]
forall a b. (a -> b) -> [a] -> [b]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Sam -> ReaderT Sig SE (S Sig2)
forall a. Sample a -> ReaderT Sig SE (S a)
unSam [Sam]
as
let ds :: [D]
ds = (S Sig2 -> D) -> [S Sig2] -> [D]
forall a b. (a -> b) -> [a] -> [b]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (Sig -> D
ir (Sig -> D) -> (S Sig2 -> Sig) -> S Sig2 -> D
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Dur -> Sig
getDur (Dur -> Sig) -> (S Sig2 -> Dur) -> S Sig2 -> Sig
forall b c a. (b -> c) -> (a -> b) -> a -> c
. S Sig2 -> Dur
forall a. S a -> Dur
samDur) [S Sig2]
xs
let sigs :: [Sig2]
sigs = (S Sig2 -> Sig2) -> [S Sig2] -> [Sig2]
forall a b. (a -> b) -> [a] -> [b]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap S Sig2 -> Sig2
forall a. S a -> a
samSig [S Sig2]
xs
S Sig2 -> ReaderT Sig SE (S Sig2)
forall a. a -> ReaderT Sig SE a
forall (m :: * -> *) a. Monad m => a -> m a
return (S Sig2 -> ReaderT Sig SE (S Sig2))
-> S Sig2 -> ReaderT Sig SE (S Sig2)
forall a b. (a -> b) -> a -> b
$ Sig2 -> Dur -> S Sig2
forall a. a -> Dur -> S a
S ((D -> SE Sig2) -> Evt (Sco D) -> Sig2
forall a b. (Arg a, Sigs b) => (a -> SE b) -> Evt (Sco a) -> b
sched (\D
n -> Sig2 -> SE Sig2
forall a. a -> SE a
forall (m :: * -> *) a. Monad m => a -> m a
return (Sig2 -> SE Sig2) -> Sig2 -> SE Sig2
forall a b. (a -> b) -> a -> b
$ [Sig2] -> Sig -> Sig2
forall a. Tuple a => [a] -> Sig -> a
atTuple [Sig2]
sigs (Sig -> Sig2) -> Sig -> Sig2
forall a b. (a -> b) -> a -> b
$ D -> Sig
sig D
n) (Evt (Sco D) -> Sig2) -> Evt (Sco D) -> Sig2
forall a b. (a -> b) -> a -> b
$ ((D, D) -> Sco D) -> Evt (D, D) -> Evt (Sco D)
forall a b. (a -> b) -> Evt a -> Evt b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (\(D
dt, D
a) -> DurOf (Sco D) -> Sco D -> Sco D
forall a. Stretch a => DurOf a -> a -> a
str (D -> Sig
sig D
dt) (Sco D -> Sco D) -> Sco D -> Sco D
forall a b. (a -> b) -> a -> b
$ D -> Sco D
forall t a. Num t => a -> Track t a
temp D
a) (Evt (D, D) -> Evt (Sco D)) -> Evt (D, D) -> Evt (Sco D)
forall a b. (a -> b) -> a -> b
$ PickFun
pickFun ([D] -> [D] -> [(D, D)]
forall a b. [a] -> [b] -> [(a, b)]
zip [D]
ds ((Int -> D) -> [Int] -> [D]
forall a b. (a -> b) -> [a] -> [b]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Int -> D
int [Int
0..])) (Evt Unit -> Evt (D, D)) -> Evt Unit -> Evt (D, D)
forall a b. (a -> b) -> a -> b
$ Sig -> Sig -> Evt Unit
metroS Sig
bpm Sig
dtSig) Dur
InfDur
where
getDur :: Dur -> Sig
getDur Dur
x = case Dur
x of
Dur
InfDur -> -Sig
1
Dur Sig
d -> Sig
d
pick :: Sig -> [Sam] -> Sam
pick :: Sig -> [Sam] -> Sam
pick = PickFun -> Sig -> [Sam] -> Sam
genPick PickFun
forall a b. (Tuple a, Arg a) => [a] -> Evt b -> Evt a
oneOf
pickBy :: Sig -> [(Sig, Sam)] -> Sam
pickBy :: Sig -> [(Sig, Sam)] -> Sam
pickBy Sig
dt [(Sig, Sam)]
as = PickFun -> Sig -> [Sam] -> Sam
genPick (\[(D, D)]
ds -> Rnds (D, D) -> Evt Unit -> Evt (D, D)
forall a b. (Tuple a, Arg a) => Rnds a -> Evt b -> Evt a
freqOf (Rnds (D, D) -> Evt Unit -> Evt (D, D))
-> Rnds (D, D) -> Evt Unit -> Evt (D, D)
forall a b. (a -> b) -> a -> b
$ [Sig] -> [(D, D)] -> Rnds (D, D)
forall a b. [a] -> [b] -> [(a, b)]
zip (((Sig, Sam) -> Sig) -> [(Sig, Sam)] -> [Sig]
forall a b. (a -> b) -> [a] -> [b]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (Sig, Sam) -> Sig
forall a b. (a, b) -> a
fst [(Sig, Sam)]
as) [(D, D)]
ds) Sig
dt (((Sig, Sam) -> Sam) -> [(Sig, Sam)] -> [Sam]
forall a b. (a -> b) -> [a] -> [b]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (Sig, Sam) -> Sam
forall a b. (a, b) -> b
snd [(Sig, Sam)]
as)
type EnvFun = (Dur -> D -> D -> Sig)
genEnv :: EnvFun -> D -> D -> Sam -> Sam
genEnv :: EnvFun -> D -> D -> Sam -> Sam
genEnv EnvFun
env D
start D
end = (Sig -> S Sig2 -> S Sig2) -> Sam -> Sam
tfmS ((Sig -> S Sig2 -> S Sig2) -> Sam -> Sam)
-> (Sig -> S Sig2 -> S Sig2) -> Sam -> Sam
forall a b. (a -> b) -> a -> b
$ \Sig
bpm S Sig2
a ->
let absStart :: D
absStart = Sig -> D -> D
toSecD Sig
bpm D
start
absEnd :: D
absEnd = Sig -> D -> D
toSecD Sig
bpm D
end
in S Sig2
a { samSig = mul (env (samDur a) absStart absEnd) $ samSig a }
linEnv :: D -> D -> Sam -> Sam
linEnv :: D -> D -> Sam -> Sam
linEnv = EnvFun -> D -> D -> Sam -> Sam
genEnv (EnvFun -> D -> D -> Sam -> Sam) -> EnvFun -> D -> D -> Sam -> Sam
forall a b. (a -> b) -> a -> b
$ \Dur
dur D
start D
end -> case Dur
dur of
Dur
InfDur -> [D] -> Sig
linseg [D
0, D
start, D
1]
Dur Sig
d -> [D] -> Sig
linseg [D
0, D
start, D
1, D -> D -> D
forall a. (IfB a, OrdB a) => a -> a -> a
maxB D
0 (Sig -> D
ir Sig
d D -> D -> D
forall a. Num a => a -> a -> a
- D
start D -> D -> D
forall a. Num a => a -> a -> a
- D
end), D
1, D
end , D
0]
expEnv :: D -> D -> Sam -> Sam
expEnv :: D -> D -> Sam -> Sam
expEnv = EnvFun -> D -> D -> Sam -> Sam
genEnv EnvFun
f
where
f :: EnvFun
f Dur
dur D
start D
end = case Dur
dur of
Dur
InfDur -> [D] -> Sig
expseg [D
zero, D
start, D
1]
Dur Sig
d -> [D] -> Sig
expseg [D
zero, D
start, D
1, D -> D -> D
forall a. (IfB a, OrdB a) => a -> a -> a
maxB D
0 (Sig -> D
ir Sig
d D -> D -> D
forall a. Num a => a -> a -> a
- D
start D -> D -> D
forall a. Num a => a -> a -> a
- D
end), D
1, D
end , D
zero]
zero :: D
zero = D
0.00001
genEnv1 :: (D -> Sig) -> Sam -> Sam
genEnv1 :: (D -> Sig) -> Sam -> Sam
genEnv1 D -> Sig
envFun = (S Sig2 -> Sig2) -> Sam -> Sam
tfmBy S Sig2 -> Sig2
f
where
f :: S Sig2 -> Sig2
f S Sig2
a = (Sig -> Sig2 -> Sig2) -> Sig2 -> Sig -> Sig2
forall a b c. (a -> b -> c) -> b -> a -> c
flip Sig -> Sig2 -> Sig2
forall a. SigSpace a => Sig -> a -> a
mul (S Sig2 -> Sig2
forall a. S a -> a
samSig S Sig2
a) (Sig -> Sig2) -> Sig -> Sig2
forall a b. (a -> b) -> a -> b
$ case S Sig2 -> Dur
forall a. S a -> Dur
samDur S Sig2
a of
Dur
InfDur -> Sig
1
Dur Sig
d -> D -> Sig
envFun (Sig -> D
ir Sig
d)
hatEnv :: Sam -> Sam
hatEnv :: Sam -> Sam
hatEnv = (D -> Sig) -> Sam -> Sam
genEnv1 ((D -> Sig) -> Sam -> Sam) -> (D -> Sig) -> Sam -> Sam
forall a b. (a -> b) -> a -> b
$ \D
d -> Tab -> Sig -> Sig
oscBy (Double -> Double -> [Double] -> Tab
polys Double
0 Double
1 [Double
0, Double
1, -Double
1]) (Sig
1 Sig -> Sig -> Sig
forall a. Fractional a => a -> a -> a
/ D -> Sig
sig D
d)
riseEnv :: Sam -> Sam
riseEnv :: Sam -> Sam
riseEnv = (D -> Sig) -> Sam -> Sam
genEnv1 ((D -> Sig) -> Sam -> Sam) -> (D -> Sig) -> Sam -> Sam
forall a b. (a -> b) -> a -> b
$ \D
d -> [D] -> Sig
linseg [D
0, D
d, D
1]
decEnv :: Sam -> Sam
decEnv :: Sam -> Sam
decEnv = (D -> Sig) -> Sam -> Sam
genEnv1 ((D -> Sig) -> Sam -> Sam) -> (D -> Sig) -> Sam -> Sam
forall a b. (a -> b) -> a -> b
$ \D
d -> [D] -> Sig
linseg [D
1, D
d, D
0]
eriseEnv :: Sam -> Sam
eriseEnv :: Sam -> Sam
eriseEnv = (D -> Sig) -> Sam -> Sam
genEnv1 ((D -> Sig) -> Sam -> Sam) -> (D -> Sig) -> Sam -> Sam
forall a b. (a -> b) -> a -> b
$ \D
d -> [D] -> Sig
expseg [D
0.0001, D
d, D
1]
edecEnv :: Sam -> Sam
edecEnv :: Sam -> Sam
edecEnv = (D -> Sig) -> Sam -> Sam
genEnv1 ((D -> Sig) -> Sam -> Sam) -> (D -> Sig) -> Sam -> Sam
forall a b. (a -> b) -> a -> b
$ \D
d -> [D] -> Sig
expseg [D
1, D
d, D
0.0001]
type LoopFun = Sig -> Sig -> Sig2 -> Sig2
genLoop :: LoopFun -> Sam -> Sam
genLoop :: LoopFun -> Sam -> Sam
genLoop LoopFun
g = Sam -> Sam
setInfDur (Sam -> Sam) -> (Sam -> Sam) -> Sam -> Sam
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Sig -> S Sig2 -> S Sig2) -> Sam -> Sam
tfmS Sig -> S Sig2 -> S Sig2
f
where
f :: Sig -> S Sig2 -> S Sig2
f Sig
bpm S Sig2
a = S Sig2
a { samSig = case samDur a of
Dur
InfDur -> S Sig2 -> Sig2
forall a. S a -> a
samSig S Sig2
a
Dur Sig
d -> LoopFun
g Sig
bpm Sig
d (S Sig2 -> Sig2
forall a. S a -> a
samSig S Sig2
a)
}
rep1 :: Sig -> Sam -> Sam
rep1 :: Sig -> Sam -> Sam
rep1 = [Sig] -> Sam -> Sam
rep ([Sig] -> Sam -> Sam) -> (Sig -> [Sig]) -> Sig -> Sam -> Sam
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Sig -> [Sig]
forall a. a -> [a]
forall (m :: * -> *) a. Monad m => a -> m a
return
pat1 :: Sig -> Sam -> Sam
pat1 :: Sig -> Sam -> Sam
pat1 = [Sig] -> Sam -> Sam
pat ([Sig] -> Sam -> Sam) -> (Sig -> [Sig]) -> Sig -> Sam -> Sam
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Sig -> [Sig]
forall a. a -> [a]
forall (m :: * -> *) a. Monad m => a -> m a
return
rep :: [Sig] -> Sam -> Sam
rep :: [Sig] -> Sam -> Sam
rep [Sig]
dts = LoopFun -> Sam -> Sam
genLoop (LoopFun -> Sam -> Sam) -> LoopFun -> Sam -> Sam
forall a b. (a -> b) -> a -> b
$ \Sig
bpm Sig
_d Sig2
asig -> (Unit -> SE Sig2) -> Evt (Track Sig Unit) -> Sig2
forall a b. (Arg a, Sigs b) => (a -> SE b) -> Evt (Sco a) -> b
sched (SE Sig2 -> Unit -> SE Sig2
forall a b. a -> b -> a
const (SE Sig2 -> Unit -> SE Sig2) -> SE Sig2 -> Unit -> SE Sig2
forall a b. (a -> b) -> a -> b
$ Sig2 -> SE Sig2
forall a. a -> SE a
forall (m :: * -> *) a. Monad m => a -> m a
return Sig2
asig) (Evt (Track Sig Unit) -> Sig2) -> Evt (Track Sig Unit) -> Sig2
forall a b. (a -> b) -> a -> b
$ (Unit -> Track Sig Unit) -> Evt Unit -> Evt (Track Sig Unit)
forall a b. (a -> b) -> Evt a -> Evt b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (Track Sig Unit -> Unit -> Track Sig Unit
forall a b. a -> b -> a
const (Track Sig Unit -> Unit -> Track Sig Unit)
-> Track Sig Unit -> Unit -> Track Sig Unit
forall a b. (a -> b) -> a -> b
$ Sig -> Track Sig Unit
notes Sig
bpm) (Evt Unit -> Evt (Track Sig Unit))
-> Evt Unit -> Evt (Track Sig Unit)
forall a b. (a -> b) -> a -> b
$ Sig -> Sig -> Evt Unit
metroS Sig
bpm ([Sig] -> Sig
forall a. Num a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Num a) => t a -> a
sum [Sig]
dts)
where notes :: Sig -> Track Sig Unit
notes Sig
bpm = [Track Sig Unit] -> Track Sig Unit
forall a. Harmony a => [a] -> a
har ([Track Sig Unit] -> Track Sig Unit)
-> [Track Sig Unit] -> Track Sig Unit
forall a b. (a -> b) -> a -> b
$ (Sig -> Sig -> Track Sig Unit)
-> [Sig] -> [Sig] -> [Track Sig Unit]
forall a b c. (a -> b -> c) -> [a] -> [b] -> [c]
zipWith (\Sig
t Sig
dt-> Sig -> Sig -> Unit -> Track Sig Unit
forall t a. Num t => t -> t -> a -> Track t a
singleEvent (Sig -> Sig -> Sig
toSec Sig
bpm Sig
t) (Sig -> Sig -> Sig
toSec Sig
bpm Sig
dt) Unit
unit) ([Sig] -> [Sig]
patDurs [Sig]
dts) [Sig]
dts
pat :: [Sig] -> Sam -> Sam
pat :: [Sig] -> Sam -> Sam
pat [Sig]
dts = LoopFun -> Sam -> Sam
genLoop (LoopFun -> Sam -> Sam) -> LoopFun -> Sam -> Sam
forall a b. (a -> b) -> a -> b
$ \Sig
bpm Sig
d Sig2
asig -> (Unit -> SE Sig2) -> Evt (Track Sig Unit) -> Sig2
forall a b. (Arg a, Sigs b) => (a -> SE b) -> Evt (Sco a) -> b
sched (SE Sig2 -> Unit -> SE Sig2
forall a b. a -> b -> a
const (SE Sig2 -> Unit -> SE Sig2) -> SE Sig2 -> Unit -> SE Sig2
forall a b. (a -> b) -> a -> b
$ Sig2 -> SE Sig2
forall a. a -> SE a
forall (m :: * -> *) a. Monad m => a -> m a
return Sig2
asig) (Evt (Track Sig Unit) -> Sig2) -> Evt (Track Sig Unit) -> Sig2
forall a b. (a -> b) -> a -> b
$ (Unit -> Track Sig Unit) -> Evt Unit -> Evt (Track Sig Unit)
forall a b. (a -> b) -> Evt a -> Evt b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (Track Sig Unit -> Unit -> Track Sig Unit
forall a b. a -> b -> a
const (Track Sig Unit -> Unit -> Track Sig Unit)
-> Track Sig Unit -> Unit -> Track Sig Unit
forall a b. (a -> b) -> a -> b
$ Sig -> Sig -> Track Sig Unit
notes Sig
bpm Sig
d) (Evt Unit -> Evt (Track Sig Unit))
-> Evt Unit -> Evt (Track Sig Unit)
forall a b. (a -> b) -> a -> b
$ Sig -> Sig -> Evt Unit
metroS Sig
bpm ([Sig] -> Sig
forall a. Num a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Num a) => t a -> a
sum [Sig]
dts)
where notes :: Sig -> Sig -> Track Sig Unit
notes Sig
bpm Sig
d = [Track Sig Unit] -> Track Sig Unit
forall a. Harmony a => [a] -> a
har ([Track Sig Unit] -> Track Sig Unit)
-> [Track Sig Unit] -> Track Sig Unit
forall a b. (a -> b) -> a -> b
$ (Sig -> Track Sig Unit) -> [Sig] -> [Track Sig Unit]
forall a b. (a -> b) -> [a] -> [b]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (\Sig
t -> Event Sig Unit -> Track Sig Unit
forall t a. Num t => Event t a -> Track t a
fromEvent (Event Sig Unit -> Track Sig Unit)
-> Event Sig Unit -> Track Sig Unit
forall a b. (a -> b) -> a -> b
$ Sig -> Sig -> Unit -> Event Sig Unit
forall t a. t -> t -> a -> Event t a
Event (Sig -> Sig -> Sig
toSec Sig
bpm Sig
t) Sig
d Unit
unit) ([Sig] -> [Track Sig Unit]) -> [Sig] -> [Track Sig Unit]
forall a b. (a -> b) -> a -> b
$ [Sig] -> [Sig]
patDurs [Sig]
dts
rndPat :: Sig -> [Sig] -> Sam -> Sam
rndPat :: Sig -> [Sig] -> Sam -> Sam
rndPat Sig
prob [Sig]
dts = LoopFun -> Sam -> Sam
genLoop (LoopFun -> Sam -> Sam) -> LoopFun -> Sam -> Sam
forall a b. (a -> b) -> a -> b
$ \Sig
bpm Sig
d Sig2
asig -> (Unit -> SE Sig2) -> Evt (Track Sig Unit) -> Sig2
forall a b. (Arg a, Sigs b) => (a -> SE b) -> Evt (Sco a) -> b
sched (SE Sig2 -> Unit -> SE Sig2
forall a b. a -> b -> a
const (SE Sig2 -> Unit -> SE Sig2) -> SE Sig2 -> Unit -> SE Sig2
forall a b. (a -> b) -> a -> b
$ Sig -> Sig2 -> SE Sig2
forall a. (Tuple a, Num a) => Sig -> a -> SE a
rndSkipInstr Sig
prob Sig2
asig) (Evt (Track Sig Unit) -> Sig2) -> Evt (Track Sig Unit) -> Sig2
forall a b. (a -> b) -> a -> b
$ (Unit -> Track Sig Unit) -> Evt Unit -> Evt (Track Sig Unit)
forall a b. (a -> b) -> Evt a -> Evt b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (Track Sig Unit -> Unit -> Track Sig Unit
forall a b. a -> b -> a
const (Track Sig Unit -> Unit -> Track Sig Unit)
-> Track Sig Unit -> Unit -> Track Sig Unit
forall a b. (a -> b) -> a -> b
$ Sig -> Sig -> Track Sig Unit
notes Sig
bpm Sig
d) (Evt Unit -> Evt (Track Sig Unit))
-> Evt Unit -> Evt (Track Sig Unit)
forall a b. (a -> b) -> a -> b
$ Sig -> Sig -> Evt Unit
metroS Sig
bpm ([Sig] -> Sig
forall a. Num a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Num a) => t a -> a
sum [Sig]
dts)
where
notes :: Sig -> Sig -> Track Sig Unit
notes Sig
bpm Sig
d = [Track Sig Unit] -> Track Sig Unit
forall a. Harmony a => [a] -> a
har ([Track Sig Unit] -> Track Sig Unit)
-> [Track Sig Unit] -> Track Sig Unit
forall a b. (a -> b) -> a -> b
$ (Sig -> Track Sig Unit) -> [Sig] -> [Track Sig Unit]
forall a b. (a -> b) -> [a] -> [b]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (\Sig
t -> Event Sig Unit -> Track Sig Unit
forall t a. Num t => Event t a -> Track t a
fromEvent (Event Sig Unit -> Track Sig Unit)
-> Event Sig Unit -> Track Sig Unit
forall a b. (a -> b) -> a -> b
$ Sig -> Sig -> Unit -> Event Sig Unit
forall t a. t -> t -> a -> Event t a
Event (Sig -> Sig -> Sig
toSec Sig
bpm Sig
t) Sig
d Unit
unit) ([Sig] -> [Track Sig Unit]) -> [Sig] -> [Track Sig Unit]
forall a b. (a -> b) -> a -> b
$ [Sig] -> [Sig]
patDurs [Sig]
dts
pat' :: [D] -> [Sig] -> Sam -> Sam
pat' :: [D] -> [Sig] -> Sam -> Sam
pat' [D]
vols [Sig]
dts = LoopFun -> Sam -> Sam
genLoop (LoopFun -> Sam -> Sam) -> LoopFun -> Sam -> Sam
forall a b. (a -> b) -> a -> b
$ \Sig
bpm Sig
d Sig2
asig -> (D -> SE Sig2) -> Evt (Sco D) -> Sig2
forall a b. (Arg a, Sigs b) => (a -> SE b) -> Evt (Sco a) -> b
sched (Sig2 -> D -> SE Sig2
forall {m :: * -> *} {a}. (Monad m, SigSpace a) => a -> D -> m a
instr Sig2
asig) (Evt (Sco D) -> Sig2) -> Evt (Sco D) -> Sig2
forall a b. (a -> b) -> a -> b
$ (Unit -> Sco D) -> Evt Unit -> Evt (Sco D)
forall a b. (a -> b) -> Evt a -> Evt b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (Sco D -> Unit -> Sco D
forall a b. a -> b -> a
const (Sco D -> Unit -> Sco D) -> Sco D -> Unit -> Sco D
forall a b. (a -> b) -> a -> b
$ Sig -> Sig -> Sco D
notes Sig
bpm Sig
d) (Evt Unit -> Evt (Sco D)) -> Evt Unit -> Evt (Sco D)
forall a b. (a -> b) -> a -> b
$ Sig -> Sig -> Evt Unit
metroS Sig
bpm ([Sig] -> Sig
forall a. Num a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Num a) => t a -> a
sum [Sig]
dts')
where
notes :: Sig -> Sig -> Sco D
notes Sig
bpm Sig
d = [Sco D] -> Sco D
forall a. Harmony a => [a] -> a
har ([Sco D] -> Sco D) -> [Sco D] -> Sco D
forall a b. (a -> b) -> a -> b
$ (D -> Sig -> Sco D) -> [D] -> [Sig] -> [Sco D]
forall a b c. (a -> b -> c) -> [a] -> [b] -> [c]
zipWith (\D
v Sig
t -> Sig -> Sig -> D -> Sco D
forall t a. Num t => t -> t -> a -> Track t a
singleEvent (Sig -> Sig -> Sig
toSec Sig
bpm Sig
t) Sig
d D
v) [D]
vols' ([Sig] -> [Sco D]) -> [Sig] -> [Sco D]
forall a b. (a -> b) -> a -> b
$ [Sig] -> [Sig]
patDurs [Sig]
dts'
instr :: a -> D -> m a
instr a
asig D
v = a -> m a
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return (a -> m a) -> a -> m a
forall a b. (a -> b) -> a -> b
$ Sig -> a -> a
forall a. SigSpace a => Sig -> a -> a
mul (D -> Sig
sig D
v) a
asig
([D]
vols', [Sig]
dts') = [(D, Sig)] -> ([D], [Sig])
forall a b. [(a, b)] -> ([a], [b])
unzip ([(D, Sig)] -> ([D], [Sig])) -> [(D, Sig)] -> ([D], [Sig])
forall a b. (a -> b) -> a -> b
$ [D] -> [Sig] -> [(D, Sig)]
forall a b. [a] -> [b] -> [(a, b)]
lcmList [D]
vols [Sig]
dts
rndSkipInstr :: (Tuple a, Num a) => Sig -> a -> SE a
rndSkipInstr :: forall a. (Tuple a, Num a) => Sig -> a -> SE a
rndSkipInstr Sig
probSig a
asig = do
let prob :: D
prob = Sig -> D
ir Sig
probSig
Ref a
ref <- a -> SE (Ref a)
forall a. Tuple a => a -> SE (Ref a)
newRef a
0
D
p <- D -> D -> SE D
forall a. SigOrD a => a -> a -> SE a
random D
0 (D
1 :: D)
BoolD -> SE () -> SE ()
whenD1 (D
p D -> D -> BooleanOf D
forall a. OrdB a => a -> a -> BooleanOf a
`lessThan` D
prob) (SE () -> SE ()) -> SE () -> SE ()
forall a b. (a -> b) -> a -> b
$
Ref a -> a -> SE ()
forall a. Tuple a => Ref a -> a -> SE ()
writeRef Ref a
ref a
asig
BoolD -> SE () -> SE ()
whenD1 (D
p D -> D -> BooleanOf D
forall a. OrdB a => a -> a -> BooleanOf a
`greaterThanEquals` D
prob) (SE () -> SE ()) -> SE () -> SE ()
forall a b. (a -> b) -> a -> b
$
Ref a -> a -> SE ()
forall a. Tuple a => Ref a -> a -> SE ()
writeRef Ref a
ref a
0
Ref a -> SE a
forall a. Tuple a => Ref a -> SE a
readRef Ref a
ref
rndPat' :: Sig -> [D] -> [Sig] -> Sam -> Sam
rndPat' :: Sig -> [D] -> [Sig] -> Sam -> Sam
rndPat' Sig
prob [D]
vols [Sig]
dts = LoopFun -> Sam -> Sam
genLoop (LoopFun -> Sam -> Sam) -> LoopFun -> Sam -> Sam
forall a b. (a -> b) -> a -> b
$ \Sig
bpm Sig
d Sig2
asig -> (D -> SE Sig2) -> Evt (Sco D) -> Sig2
forall a b. (Arg a, Sigs b) => (a -> SE b) -> Evt (Sco a) -> b
sched (Sig2 -> D -> SE Sig2
instr Sig2
asig) (Evt (Sco D) -> Sig2) -> Evt (Sco D) -> Sig2
forall a b. (a -> b) -> a -> b
$ (Unit -> Sco D) -> Evt Unit -> Evt (Sco D)
forall a b. (a -> b) -> Evt a -> Evt b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (Sco D -> Unit -> Sco D
forall a b. a -> b -> a
const (Sco D -> Unit -> Sco D) -> Sco D -> Unit -> Sco D
forall a b. (a -> b) -> a -> b
$ Sig -> Sig -> Sco D
notes Sig
bpm Sig
d) (Evt Unit -> Evt (Sco D)) -> Evt Unit -> Evt (Sco D)
forall a b. (a -> b) -> a -> b
$ Sig -> Sig -> Evt Unit
metroS Sig
bpm ([Sig] -> Sig
forall a. Num a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Num a) => t a -> a
sum [Sig]
dts')
where
notes :: Sig -> Sig -> Sco D
notes Sig
bpm Sig
d = [Sco D] -> Sco D
forall a. Harmony a => [a] -> a
har ([Sco D] -> Sco D) -> [Sco D] -> Sco D
forall a b. (a -> b) -> a -> b
$ (D -> Sig -> Sco D) -> [D] -> [Sig] -> [Sco D]
forall a b c. (a -> b -> c) -> [a] -> [b] -> [c]
zipWith (\D
v Sig
t -> Sig -> Sig -> D -> Sco D
forall t a. Num t => t -> t -> a -> Track t a
singleEvent (Sig -> Sig -> Sig
toSec Sig
bpm Sig
t) Sig
d D
v) [D]
vols' ([Sig] -> [Sco D]) -> [Sig] -> [Sco D]
forall a b. (a -> b) -> a -> b
$ [Sig] -> [Sig]
patDurs [Sig]
dts'
instr :: Sig2 -> D -> SE Sig2
instr Sig2
asig D
v = Sig -> SE Sig2 -> SE Sig2
forall a. SigSpace a => Sig -> a -> a
mul (D -> Sig
sig D
v) (SE Sig2 -> SE Sig2) -> SE Sig2 -> SE Sig2
forall a b. (a -> b) -> a -> b
$ Sig -> Sig2 -> SE Sig2
forall a. (Tuple a, Num a) => Sig -> a -> SE a
rndSkipInstr Sig
prob Sig2
asig
([D]
vols', [Sig]
dts') = [(D, Sig)] -> ([D], [Sig])
forall a b. [(a, b)] -> ([a], [b])
unzip ([(D, Sig)] -> ([D], [Sig])) -> [(D, Sig)] -> ([D], [Sig])
forall a b. (a -> b) -> a -> b
$ [D] -> [Sig] -> [(D, Sig)]
forall a b. [a] -> [b] -> [(a, b)]
lcmList [D]
vols [Sig]
dts
lcmList :: [a] -> [b] -> [(a, b)]
lcmList :: forall a b. [a] -> [b] -> [(a, b)]
lcmList [a]
as [b]
bs = Int -> [(a, b)] -> [(a, b)]
forall a. Int -> [a] -> [a]
take Int
n ([(a, b)] -> [(a, b)]) -> [(a, b)] -> [(a, b)]
forall a b. (a -> b) -> a -> b
$ [a] -> [b] -> [(a, b)]
forall a b. [a] -> [b] -> [(a, b)]
zip ([a] -> [a]
forall a. HasCallStack => [a] -> [a]
cycle [a]
as) ([b] -> [b]
forall a. HasCallStack => [a] -> [a]
cycle [b]
bs)
where n :: Int
n = Int -> Int -> Int
forall a. Integral a => a -> a -> a
lcm ([a] -> Int
forall a. [a] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length [a]
as) ([b] -> Int
forall a. [a] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length [b]
bs)
wall :: Sig -> Sam -> Sam
wall :: Sig -> Sam -> Sam
wall Sig
dt Sam
a = [Sam] -> Sam
forall a. Fractional a => [a] -> a
mean [Sam
b, DurOf Sam -> Sam -> Sam
forall a. Delay a => DurOf a -> a -> a
del Sig
DurOf Sam
hdt Sam
b]
where
hdt :: Sig
hdt = Sig
0.5 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
dt
f :: Sam -> Sam
f = Sig -> Sam -> Sam
pat1 Sig
hdt (Sam -> Sam) -> (Sam -> Sam) -> Sam -> Sam
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Sam -> Sam
hatEnv (Sam -> Sam) -> (Sam -> Sam) -> Sam -> Sam
forall b c a. (b -> c) -> (a -> b) -> a -> c
. DurOf Sam -> Sam -> Sam
forall a. Limit a => DurOf a -> a -> a
lim Sig
DurOf Sam
dt
b :: Sam
b = Sam -> Sam
f Sam
a
type Chord = [D]
type Arp1Fun = Evt Unit -> Evt D
arpInstr :: Sig2 -> D -> SE Sig2
arpInstr :: Sig2 -> D -> SE Sig2
arpInstr Sig2
asig D
k = Sig2 -> SE Sig2
forall a. a -> SE a
forall (m :: * -> *) a. Monad m => a -> m a
return (Sig2 -> SE Sig2) -> Sig2 -> SE Sig2
forall a b. (a -> b) -> a -> b
$ (Sig -> Sig) -> Sig2 -> Sig2
forall a. SigSpace a => (Sig -> Sig) -> a -> a
mapSig (Sig -> Sig -> Sig
scalePitch (D -> Sig
sig D
k)) Sig2
asig
patDurs :: [Sig] -> [Sig]
patDurs :: [Sig] -> [Sig]
patDurs [Sig]
dts = [Sig] -> [Sig]
forall a. [a] -> [a]
reverse ([Sig] -> [Sig]) -> [Sig] -> [Sig]
forall a b. (a -> b) -> a -> b
$ (Sig, [Sig]) -> [Sig]
forall a b. (a, b) -> b
snd ((Sig, [Sig]) -> [Sig]) -> (Sig, [Sig]) -> [Sig]
forall a b. (a -> b) -> a -> b
$ ((Sig, [Sig]) -> Sig -> (Sig, [Sig]))
-> (Sig, [Sig]) -> [Sig] -> (Sig, [Sig])
forall b a. (b -> a -> b) -> b -> [a] -> b
forall (t :: * -> *) b a.
Foldable t =>
(b -> a -> b) -> b -> t a -> b
foldl (\(Sig
counter, [Sig]
res) Sig
a -> (Sig
a Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
+ Sig
counter, Sig
counterSig -> [Sig] -> [Sig]
forall a. a -> [a] -> [a]
:[Sig]
res)) (Sig
0, []) [Sig]
dts
genArp1 :: Arp1Fun -> Sig -> Sam -> Sam
genArp1 :: Arp1Fun -> Sig -> Sam -> Sam
genArp1 Arp1Fun
arpFun Sig
dt = LoopFun -> Sam -> Sam
genLoop (LoopFun -> Sam -> Sam) -> LoopFun -> Sam -> Sam
forall a b. (a -> b) -> a -> b
$ \Sig
bpm Sig
d Sig2
asig ->
(D -> SE Sig2) -> Evt (Sco D) -> Sig2
forall a b. (Arg a, Sigs b) => (a -> SE b) -> Evt (Sco a) -> b
sched (Sig2 -> D -> SE Sig2
arpInstr Sig2
asig) (Evt (Sco D) -> Sig2) -> Evt (Sco D) -> Sig2
forall a b. (a -> b) -> a -> b
$ Sig -> Evt D -> Evt (Sco D)
forall a. Sig -> Evt a -> Evt (Sco a)
withDur Sig
d (Evt D -> Evt (Sco D)) -> Evt D -> Evt (Sco D)
forall a b. (a -> b) -> a -> b
$ Arp1Fun
arpFun Arp1Fun -> Arp1Fun
forall a b. (a -> b) -> a -> b
$ Sig -> Sig -> Evt Unit
metroS Sig
bpm Sig
dt
arpUp1 :: Chord -> Sig -> Sam -> Sam
arpUp1 :: [D] -> Sig -> Sam -> Sam
arpUp1 = Arp1Fun -> Sig -> Sam -> Sam
genArp1 (Arp1Fun -> Sig -> Sam -> Sam)
-> ([D] -> Arp1Fun) -> [D] -> Sig -> Sam -> Sam
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [D] -> Arp1Fun
forall a b. (Tuple a, Arg a) => [a] -> Evt b -> Evt a
cycleE
arpDown1 :: Chord -> Sig -> Sam -> Sam
arpDown1 :: [D] -> Sig -> Sam -> Sam
arpDown1 [D]
ch = [D] -> Sig -> Sam -> Sam
arpUp1 ([D] -> [D]
forall a. [a] -> [a]
reverse [D]
ch)
arpOneOf1 :: Chord -> Sig -> Sam -> Sam
arpOneOf1 :: [D] -> Sig -> Sam -> Sam
arpOneOf1 = Arp1Fun -> Sig -> Sam -> Sam
genArp1 (Arp1Fun -> Sig -> Sam -> Sam)
-> ([D] -> Arp1Fun) -> [D] -> Sig -> Sam -> Sam
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [D] -> Arp1Fun
forall a b. (Tuple a, Arg a) => [a] -> Evt b -> Evt a
oneOf
arpFreqOf1 :: [Sig] -> Chord -> Sig -> Sam -> Sam
arpFreqOf1 :: [Sig] -> [D] -> Sig -> Sam -> Sam
arpFreqOf1 [Sig]
freqs [D]
ch = Arp1Fun -> Sig -> Sam -> Sam
genArp1 (Rnds D -> Arp1Fun
forall a b. (Tuple a, Arg a) => Rnds a -> Evt b -> Evt a
freqOf ([Sig] -> [D] -> Rnds D
forall a b. [a] -> [b] -> [(a, b)]
zip [Sig]
freqs [D]
ch))
genArp :: Arp1Fun -> [Sig] -> Sam -> Sam
genArp :: Arp1Fun -> [Sig] -> Sam -> Sam
genArp Arp1Fun
arpFun [Sig]
dts = LoopFun -> Sam -> Sam
genLoop (LoopFun -> Sam -> Sam) -> LoopFun -> Sam -> Sam
forall a b. (a -> b) -> a -> b
$ \Sig
bpm Sig
d Sig2
asig -> (D -> SE Sig2) -> Evt (Sco D) -> Sig2
forall a b. (Arg a, Sigs b) => (a -> SE b) -> Evt (Sco a) -> b
sched (Sig2 -> D -> SE Sig2
arpInstr Sig2
asig) (Evt (Sco D) -> Sig2) -> Evt (Sco D) -> Sig2
forall a b. (a -> b) -> a -> b
$ (D -> Sco D) -> Evt D -> Evt (Sco D)
forall a b. (a -> b) -> Evt a -> Evt b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (Sig -> Sig -> D -> Sco D
notes Sig
bpm Sig
d) (Evt D -> Evt (Sco D)) -> Evt D -> Evt (Sco D)
forall a b. (a -> b) -> a -> b
$ Arp1Fun
arpFun Arp1Fun -> Arp1Fun
forall a b. (a -> b) -> a -> b
$ Sig -> Sig -> Evt Unit
metroS Sig
bpm ([Sig] -> Sig
forall a. Num a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Num a) => t a -> a
sum [Sig]
dts)
where notes :: Sig -> Sig -> D -> Sco D
notes Sig
bpm Sig
d D
pchScale = [Sco D] -> Sco D
forall a. Harmony a => [a] -> a
har ([Sco D] -> Sco D) -> [Sco D] -> Sco D
forall a b. (a -> b) -> a -> b
$ (Sig -> Sco D) -> [Sig] -> [Sco D]
forall a b. (a -> b) -> [a] -> [b]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (\Sig
t -> Sig -> Sig -> D -> Sco D
forall t a. Num t => t -> t -> a -> Track t a
singleEvent (Sig -> Sig -> Sig
toSec Sig
bpm Sig
t) Sig
d D
pchScale) ([Sig] -> [Sco D]) -> [Sig] -> [Sco D]
forall a b. (a -> b) -> a -> b
$ [Sig] -> [Sig]
patDurs [Sig]
dts
arpUp :: Chord -> [Sig] -> Sam -> Sam
arpUp :: [D] -> [Sig] -> Sam -> Sam
arpUp = Arp1Fun -> [Sig] -> Sam -> Sam
genArp (Arp1Fun -> [Sig] -> Sam -> Sam)
-> ([D] -> Arp1Fun) -> [D] -> [Sig] -> Sam -> Sam
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [D] -> Arp1Fun
forall a b. (Tuple a, Arg a) => [a] -> Evt b -> Evt a
cycleE
arpDown :: Chord -> [Sig] -> Sam -> Sam
arpDown :: [D] -> [Sig] -> Sam -> Sam
arpDown [D]
ch = [D] -> [Sig] -> Sam -> Sam
arpUp ([D] -> [D]
forall a. [a] -> [a]
reverse [D]
ch)
arpOneOf :: Chord -> [Sig] -> Sam -> Sam
arpOneOf :: [D] -> [Sig] -> Sam -> Sam
arpOneOf = Arp1Fun -> [Sig] -> Sam -> Sam
genArp (Arp1Fun -> [Sig] -> Sam -> Sam)
-> ([D] -> Arp1Fun) -> [D] -> [Sig] -> Sam -> Sam
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [D] -> Arp1Fun
forall a b. (Tuple a, Arg a) => [a] -> Evt b -> Evt a
oneOf
arpFreqOf :: [Sig] -> Chord -> [Sig] -> Sam -> Sam
arpFreqOf :: [Sig] -> [D] -> [Sig] -> Sam -> Sam
arpFreqOf [Sig]
freqs [D]
ch = Arp1Fun -> [Sig] -> Sam -> Sam
genArp (Rnds D -> Arp1Fun
forall a b. (Tuple a, Arg a) => Rnds a -> Evt b -> Evt a
freqOf (Rnds D -> Arp1Fun) -> Rnds D -> Arp1Fun
forall a b. (a -> b) -> a -> b
$ [Sig] -> [D] -> Rnds D
forall a b. [a] -> [b] -> [(a, b)]
zip [Sig]
freqs [D]
ch)
metroS :: Bpm -> Sig -> Evt Unit
metroS :: Sig -> Sig -> Evt Unit
metroS Sig
bpm Sig
dt = Sig -> Evt Unit
metro (Sig -> Sig
forall a. Fractional a => a -> a
recip (Sig -> Sig) -> Sig -> Sig
forall a b. (a -> b) -> a -> b
$ Sig -> Sig -> Sig
toSec Sig
bpm Sig
dt)
forAirports :: [(Sig, Sig, Sig)] -> Sam -> Sam
forAirports :: [(Sig, Sig, Sig)] -> Sam -> Sam
forAirports [(Sig, Sig, Sig)]
xs Sam
sample = [Sam] -> Sam
forall a. Fractional a => [a] -> a
mean ([Sam] -> Sam) -> [Sam] -> Sam
forall a b. (a -> b) -> a -> b
$ (((Sig, Sig, Sig) -> Sam) -> [(Sig, Sig, Sig)] -> [Sam])
-> [(Sig, Sig, Sig)] -> ((Sig, Sig, Sig) -> Sam) -> [Sam]
forall a b c. (a -> b -> c) -> b -> a -> c
flip ((Sig, Sig, Sig) -> Sam) -> [(Sig, Sig, Sig)] -> [Sam]
forall a b. (a -> b) -> [a] -> [b]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap [(Sig, Sig, Sig)]
xs (((Sig, Sig, Sig) -> Sam) -> [Sam])
-> ((Sig, Sig, Sig) -> Sam) -> [Sam]
forall a b. (a -> b) -> a -> b
$
\(Sig
delTime, Sig
loopTime, Sig
note) -> DurOf Sam -> Sam -> Sam
forall a. Delay a => DurOf a -> a -> a
del Sig
DurOf Sam
delTime (Sam -> Sam) -> Sam -> Sam
forall a b. (a -> b) -> a -> b
$ [Sig] -> Sam -> Sam
pat [Sig
loopTime] (Sig -> Sam -> Sam
atPch Sig
note Sam
sample)
genForAirports :: [(Sig, Sig, Sam)] -> Sam
genForAirports :: [(Sig, Sig, Sam)] -> Sam
genForAirports [(Sig, Sig, Sam)]
xs = [Sam] -> Sam
forall a. Fractional a => [a] -> a
mean ([Sam] -> Sam) -> [Sam] -> Sam
forall a b. (a -> b) -> a -> b
$ ((Sig, Sig, Sam) -> Sam) -> [(Sig, Sig, Sam)] -> [Sam]
forall a b. (a -> b) -> [a] -> [b]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (\(Sig
delTime, Sig
loopTime, Sam
sample) -> DurOf Sam -> Sam -> Sam
forall a. Delay a => DurOf a -> a -> a
del Sig
DurOf Sam
delTime (Sam -> Sam) -> Sam -> Sam
forall a b. (a -> b) -> a -> b
$ [Sig] -> Sam -> Sam
pat [Sig
loopTime] Sam
sample) [(Sig, Sig, Sam)]
xs
arp1 :: (SigSpace a, Sigs a) => (D -> SE a) -> Sig -> Sig -> Int -> [D] -> a
arp1 :: forall a.
(SigSpace a, Sigs a) =>
(D -> SE a) -> Sig -> Sig -> Int -> [D] -> a
arp1 D -> SE a
instr Sig
bpm Sig
dt Int
n [D]
ch = ((D, D) -> SE a) -> Evt (Sco (D, D)) -> a
forall a b. (Arg a, Sigs b) => (a -> SE b) -> Evt (Sco a) -> b
sched (\(D
amp, D
cps) -> (a -> a) -> SE a -> SE a
forall a b. (a -> b) -> SE a -> SE b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (Sig -> a -> a
forall a. SigSpace a => Sig -> a -> a
mul (D -> Sig
sig D
amp)) (SE a -> SE a) -> SE a -> SE a
forall a b. (a -> b) -> a -> b
$ D -> SE a
instr D
cps) (Evt (Sco (D, D)) -> a) -> Evt (Sco (D, D)) -> a
forall a b. (a -> b) -> a -> b
$
Sig -> Evt (D, D) -> Evt (Sco (D, D))
forall a. Sig -> Evt a -> Evt (Sco a)
withDur (Sig -> Sig -> Sig
toSec Sig
bpm Sig
dt) (Evt (D, D) -> Evt (Sco (D, D))) -> Evt (D, D) -> Evt (Sco (D, D))
forall a b. (a -> b) -> a -> b
$ PickFun
forall a b. (Tuple a, Arg a) => [a] -> Evt b -> Evt a
cycleE ([D] -> [D] -> [(D, D)]
forall a b. [a] -> [b] -> [(a, b)]
lcmList (D
1 D -> [D] -> [D]
forall a. a -> [a] -> [a]
: Int -> D -> [D]
forall a. Int -> a -> [a]
replicate (Int
n Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int
1) D
0.7) [D]
ch) (Evt Unit -> Evt (D, D)) -> Evt Unit -> Evt (D, D)
forall a b. (a -> b) -> a -> b
$ Sig -> Sig -> Evt Unit
metroS Sig
bpm Sig
dt
arpy :: (D -> SE Sig2) -> Sig -> Sig -> Int -> [[D]] -> Sam
arpy :: (D -> SE Sig2) -> Sig -> Sig -> Int -> [[D]] -> Sam
arpy D -> SE Sig2
instr Sig
chordPeriod Sig
speed Int
accentNum [[D]]
chords = ReaderT Sig SE (S Sig2) -> Sam
forall a. ReaderT Sig SE (S a) -> Sample a
Sam (ReaderT Sig SE (S Sig2) -> Sam) -> ReaderT Sig SE (S Sig2) -> Sam
forall a b. (a -> b) -> a -> b
$ do
Sig
bpm <- ReaderT Sig SE Sig
forall (m :: * -> *) r. Monad m => ReaderT r m r
ask
S Sig2
res <- Sam -> ReaderT Sig SE (S Sig2)
forall a. Sample a -> ReaderT Sig SE (S a)
unSam (Sam -> ReaderT Sig SE (S Sig2)) -> Sam -> ReaderT Sig SE (S Sig2)
forall a b. (a -> b) -> a -> b
$ Sam -> Sam
forall a. Loop a => a -> a
loop (Sam -> Sam) -> Sam -> Sam
forall a b. (a -> b) -> a -> b
$ [Sam] -> Sam
flow ([Sam] -> Sam) -> [Sam] -> Sam
forall a b. (a -> b) -> a -> b
$ ([D] -> Sam) -> [[D]] -> [Sam]
forall a b. (a -> b) -> [a] -> [b]
map (D -> D -> Sam -> Sam
linEnv D
0.05 D
0.05 (Sam -> Sam) -> ([D] -> Sam) -> [D] -> Sam
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Sig -> Sig2 -> Sam
fromSig2 Sig
chordPeriod (Sig2 -> Sam) -> ([D] -> Sig2) -> [D] -> Sam
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (D -> SE Sig2) -> Sig -> Sig -> Int -> [D] -> Sig2
forall a.
(SigSpace a, Sigs a) =>
(D -> SE a) -> Sig -> Sig -> Int -> [D] -> a
arp1 D -> SE Sig2
instr Sig
bpm Sig
speed Int
accentNum) [[D]]
chords
S Sig2 -> ReaderT Sig SE (S Sig2)
forall a. a -> ReaderT Sig SE a
forall (m :: * -> *) a. Monad m => a -> m a
return (S Sig2 -> ReaderT Sig SE (S Sig2))
-> S Sig2 -> ReaderT Sig SE (S Sig2)
forall a b. (a -> b) -> a -> b
$ Sig2 -> Dur -> S Sig2
forall a. a -> Dur -> S a
S (S Sig2 -> Sig2
forall a. S a -> a
samSig S Sig2
res) Dur
InfDur
atPanRnd :: Sam -> Sam
atPanRnd :: Sam -> Sam
atPanRnd = (Sig2 -> SE Sig2) -> Sam -> Sam
forall a b. (a -> SE b) -> Sample a -> Sample b
bindSam Sig2 -> SE Sig2
rndPan2
atVolGauss :: D -> Sam -> Sam
atVolGauss :: D -> Sam -> Sam
atVolGauss D
k = (Sig2 -> SE Sig2) -> Sam -> Sam
forall a b. (a -> SE b) -> Sample a -> Sample b
bindSam (D -> Sig2 -> SE Sig2
forall a. SigSpace a => D -> a -> SE a
gaussVol D
k)
atVolRnd :: (D, D) -> Sam -> Sam
atVolRnd :: (D, D) -> Sam -> Sam
atVolRnd (D, D)
k = (Sig2 -> SE Sig2) -> Sam -> Sam
forall a b. (a -> SE b) -> Sample a -> Sample b
bindSam ((D, D) -> Sig2 -> SE Sig2
forall a. SigSpace a => (D, D) -> a -> SE a
rndVol (D, D)
k)
class ToSam a where
toSam :: a -> Sam
limSam :: ToSam a => Sig -> a -> Sam
limSam :: forall a. ToSam a => Sig -> a -> Sam
limSam Sig
dt = DurOf Sam -> Sam -> Sam
forall a. Limit a => DurOf a -> a -> a
lim Sig
DurOf Sam
dt (Sam -> Sam) -> (a -> Sam) -> a -> Sam
forall b c a. (b -> c) -> (a -> b) -> a -> c
. a -> Sam
forall a. ToSam a => a -> Sam
toSam
instance ToSam Sig where
toSam :: Sig -> Sam
toSam Sig
x = ReaderT Sig SE (S Sig2) -> Sam
forall a. ReaderT Sig SE (S a) -> Sample a
Sam (ReaderT Sig SE (S Sig2) -> Sam) -> ReaderT Sig SE (S Sig2) -> Sam
forall a b. (a -> b) -> a -> b
$ S Sig2 -> ReaderT Sig SE (S Sig2)
forall a. a -> ReaderT Sig SE a
forall (m :: * -> *) a. Monad m => a -> m a
return (S Sig2 -> ReaderT Sig SE (S Sig2))
-> S Sig2 -> ReaderT Sig SE (S Sig2)
forall a b. (a -> b) -> a -> b
$ Sig2 -> Dur -> S Sig2
forall a. a -> Dur -> S a
S (Sig
x, Sig
x) Dur
InfDur
instance ToSam Sig2 where
toSam :: Sig2 -> Sam
toSam Sig2
x = ReaderT Sig SE (S Sig2) -> Sam
forall a. ReaderT Sig SE (S a) -> Sample a
Sam (ReaderT Sig SE (S Sig2) -> Sam) -> ReaderT Sig SE (S Sig2) -> Sam
forall a b. (a -> b) -> a -> b
$ S Sig2 -> ReaderT Sig SE (S Sig2)
forall a. a -> ReaderT Sig SE a
forall (m :: * -> *) a. Monad m => a -> m a
return (S Sig2 -> ReaderT Sig SE (S Sig2))
-> S Sig2 -> ReaderT Sig SE (S Sig2)
forall a b. (a -> b) -> a -> b
$ Sig2 -> Dur -> S Sig2
forall a. a -> Dur -> S a
S Sig2
x Dur
InfDur
instance ToSam (SE Sig) where
toSam :: SE Sig -> Sam
toSam SE Sig
x = ReaderT Sig SE (S Sig2) -> Sam
forall a. ReaderT Sig SE (S a) -> Sample a
Sam (ReaderT Sig SE (S Sig2) -> Sam) -> ReaderT Sig SE (S Sig2) -> Sam
forall a b. (a -> b) -> a -> b
$ do
Sig
y <- SE Sig -> ReaderT Sig SE Sig
forall (m :: * -> *) a. Monad m => m a -> ReaderT Sig m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift SE Sig
x
S Sig2 -> ReaderT Sig SE (S Sig2)
forall a. a -> ReaderT Sig SE a
forall (m :: * -> *) a. Monad m => a -> m a
return (S Sig2 -> ReaderT Sig SE (S Sig2))
-> S Sig2 -> ReaderT Sig SE (S Sig2)
forall a b. (a -> b) -> a -> b
$ Sig2 -> Dur -> S Sig2
forall a. a -> Dur -> S a
S (Sig
y, Sig
y) Dur
InfDur
instance ToSam (SE Sig2) where
toSam :: SE Sig2 -> Sam
toSam SE Sig2
x = ReaderT Sig SE (S Sig2) -> Sam
forall a. ReaderT Sig SE (S a) -> Sample a
Sam (ReaderT Sig SE (S Sig2) -> Sam) -> ReaderT Sig SE (S Sig2) -> Sam
forall a b. (a -> b) -> a -> b
$ do
Sig2
y <- SE Sig2 -> ReaderT Sig SE Sig2
forall (m :: * -> *) a. Monad m => m a -> ReaderT Sig m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift SE Sig2
x
S Sig2 -> ReaderT Sig SE (S Sig2)
forall a. a -> ReaderT Sig SE a
forall (m :: * -> *) a. Monad m => a -> m a
return (S Sig2 -> ReaderT Sig SE (S Sig2))
-> S Sig2 -> ReaderT Sig SE (S Sig2)
forall a b. (a -> b) -> a -> b
$ Sig2 -> Dur -> S Sig2
forall a. a -> Dur -> S a
S Sig2
y Dur
InfDur
ramLoop :: Fidelity -> TempoSig -> PitchSig -> String -> Sam
ramLoop :: D -> Sig -> Sig -> String -> Sam
ramLoop D
winSize Sig
tempo Sig
pitch String
file = Sig2 -> Sam
forall a. ToSam a => a -> Sam
toSam (Sig2 -> Sam) -> Sig2 -> Sam
forall a b. (a -> b) -> a -> b
$ D -> Sig -> Sig -> String -> Sig2
loopRam D
winSize Sig
tempo Sig
pitch String
file
ramRead :: Fidelity -> TempoSig -> PitchSig -> String -> Sam
ramRead :: D -> Sig -> Sig -> String -> Sam
ramRead D
winSize Sig
tempo Sig
pitch String
file = Sig -> Sig2 -> Sam
sig2 (D -> Sig
sig (String -> D
lengthSnd String
file) Sig -> Sig -> Sig
forall a. Fractional a => a -> a -> a
/ Sig
tempo) (Sig2 -> Sam) -> Sig2 -> Sam
forall a b. (a -> b) -> a -> b
$ D -> Sig -> Sig -> String -> Sig2
readRam D
winSize Sig
tempo Sig
pitch String
file
segLoop :: Fidelity -> (Sig, Sig) -> TempoSig -> PitchSig -> String -> Sam
segLoop :: D -> Sig2 -> Sig -> Sig -> String -> Sam
segLoop D
winSize Sig2
ds Sig
tempo Sig
pitch String
file = Sig2 -> Sam
forall a. ToSam a => a -> Sam
toSam (Sig2 -> Sam) -> Sig2 -> Sam
forall a b. (a -> b) -> a -> b
$ D -> Sig2 -> Sig -> Sig -> String -> Sig2
loopSeg D
winSize Sig2
ds Sig
tempo Sig
pitch String
file
segRead :: Fidelity -> (Sig, Sig) -> TempoSig -> PitchSig -> String -> Sam
segRead :: D -> Sig2 -> Sig -> Sig -> String -> Sam
segRead D
winSize ds :: Sig2
ds@(Sig
kmin, Sig
kmax) Sig
tempo Sig
pitch String
file = Sig -> Sig2 -> Sam
sig2 ((Sig
kmax Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
- Sig
kmin) Sig -> Sig -> Sig
forall a. Fractional a => a -> a -> a
/ Sig
tempo) (Sig2 -> Sam) -> Sig2 -> Sam
forall a b. (a -> b) -> a -> b
$ D -> Sig2 -> Sig -> Sig -> String -> Sig2
readSeg D
winSize Sig2
ds Sig
tempo Sig
pitch String
file
relLoop :: Fidelity -> (Sig, Sig) -> TempoSig -> PitchSig -> String -> Sam
relLoop :: D -> Sig2 -> Sig -> Sig -> String -> Sam
relLoop D
winSize Sig2
ds Sig
tempo Sig
pitch String
file = Sig2 -> Sam
forall a. ToSam a => a -> Sam
toSam (Sig2 -> Sam) -> Sig2 -> Sam
forall a b. (a -> b) -> a -> b
$ D -> Sig2 -> Sig -> Sig -> String -> Sig2
loopRel D
winSize Sig2
ds Sig
tempo Sig
pitch String
file
relRead :: Fidelity -> (Sig, Sig) -> TempoSig -> PitchSig -> String -> Sam
relRead :: D -> Sig2 -> Sig -> Sig -> String -> Sam
relRead D
winSize ds :: Sig2
ds@(Sig
kmin, Sig
kmax) Sig
tempo Sig
pitch String
file = Sig -> Sig2 -> Sam
sig2 ((Sig
kmax Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
- Sig
kmin) Sig -> Sig -> Sig
forall a. Fractional a => a -> a -> a
/ Sig
tempo) (Sig2 -> Sam) -> Sig2 -> Sam
forall a b. (a -> b) -> a -> b
$ D -> Sig2 -> Sig -> Sig -> String -> Sig2
readRel D
winSize Sig2
ds Sig
tempo Sig
pitch String
file
ramLoop1 :: Fidelity -> TempoSig -> PitchSig -> String -> Sam
ramLoop1 :: D -> Sig -> Sig -> String -> Sam
ramLoop1 D
winSize Sig
tempo Sig
pitch String
file = Sig -> Sam
forall a. ToSam a => a -> Sam
toSam (Sig -> Sam) -> Sig -> Sam
forall a b. (a -> b) -> a -> b
$ D -> Sig -> Sig -> String -> Sig
loopRam1 D
winSize Sig
tempo Sig
pitch String
file
ramRead1 :: Fidelity -> TempoSig -> PitchSig -> String -> Sam
ramRead1 :: D -> Sig -> Sig -> String -> Sam
ramRead1 D
winSize Sig
tempo Sig
pitch String
file = Sig -> Sig -> Sam
sig1 (D -> Sig
sig (String -> D
lengthSnd String
file) Sig -> Sig -> Sig
forall a. Fractional a => a -> a -> a
/ Sig
tempo) (Sig -> Sam) -> Sig -> Sam
forall a b. (a -> b) -> a -> b
$ D -> Sig -> Sig -> String -> Sig
readRam1 D
winSize Sig
tempo Sig
pitch String
file
segLoop1 :: Fidelity -> (Sig, Sig) -> TempoSig -> PitchSig -> String -> Sam
segLoop1 :: D -> Sig2 -> Sig -> Sig -> String -> Sam
segLoop1 D
winSize Sig2
ds Sig
tempo Sig
pitch String
file = Sig -> Sam
forall a. ToSam a => a -> Sam
toSam (Sig -> Sam) -> Sig -> Sam
forall a b. (a -> b) -> a -> b
$ D -> Sig2 -> Sig -> Sig -> String -> Sig
loopSeg1 D
winSize Sig2
ds Sig
tempo Sig
pitch String
file
segRead1 :: Fidelity -> (Sig, Sig) -> TempoSig -> PitchSig -> String -> Sam
segRead1 :: D -> Sig2 -> Sig -> Sig -> String -> Sam
segRead1 D
winSize ds :: Sig2
ds@(Sig
kmin, Sig
kmax) Sig
tempo Sig
pitch String
file = Sig -> Sig -> Sam
sig1 ((Sig
kmax Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
- Sig
kmin) Sig -> Sig -> Sig
forall a. Fractional a => a -> a -> a
/ Sig
tempo) (Sig -> Sam) -> Sig -> Sam
forall a b. (a -> b) -> a -> b
$ D -> Sig2 -> Sig -> Sig -> String -> Sig
readSeg1 D
winSize Sig2
ds Sig
tempo Sig
pitch String
file
relLoop1 :: Fidelity -> (Sig, Sig) -> TempoSig -> PitchSig -> String -> Sam
relLoop1 :: D -> Sig2 -> Sig -> Sig -> String -> Sam
relLoop1 D
winSize Sig2
ds Sig
tempo Sig
pitch String
file = Sig -> Sam
forall a. ToSam a => a -> Sam
toSam (Sig -> Sam) -> Sig -> Sam
forall a b. (a -> b) -> a -> b
$ D -> Sig2 -> Sig -> Sig -> String -> Sig
loopRel1 D
winSize Sig2
ds Sig
tempo Sig
pitch String
file
relRead1 :: Fidelity -> (Sig, Sig) -> TempoSig -> PitchSig -> String -> Sam
relRead1 :: D -> Sig2 -> Sig -> Sig -> String -> Sam
relRead1 D
winSize ds :: Sig2
ds@(Sig
kmin, Sig
kmax) Sig
tempo Sig
pitch String
file = Sig -> Sig -> Sam
sig1 ((Sig
kmax Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
- Sig
kmin) Sig -> Sig -> Sig
forall a. Fractional a => a -> a -> a
/ Sig
tempo) (Sig -> Sam) -> Sig -> Sam
forall a b. (a -> b) -> a -> b
$ D -> Sig2 -> Sig -> Sig -> String -> Sig
readRel1 D
winSize Sig2
ds Sig
tempo Sig
pitch String
file
wavScale :: Fidelity -> TempoSig -> PitchSig -> String -> Sam
wavScale :: D -> Sig -> Sig -> String -> Sam
wavScale D
winSize Sig
tempo Sig
pitch String
file = Sig2 -> Sam
forall a. ToSam a => a -> Sam
toSam (Sig2 -> Sam) -> Sig2 -> Sam
forall a b. (a -> b) -> a -> b
$ D -> Sig -> Sig -> String -> Sig2
scaleWav D
winSize Sig
tempo Sig
pitch String
file
wavScale1 :: Fidelity -> TempoSig -> PitchSig -> String -> Sam
wavScale1 :: D -> Sig -> Sig -> String -> Sam
wavScale1 D
winSize Sig
tempo Sig
pitch String
file = Sig -> Sam
forall a. ToSam a => a -> Sam
toSam (Sig -> Sam) -> Sig -> Sam
forall a b. (a -> b) -> a -> b
$ D -> Sig -> Sig -> String -> Sig
scaleWav1 D
winSize Sig
tempo Sig
pitch String
file
drumScale :: TempoSig -> PitchSig -> String -> Sam
drumScale :: Sig -> Sig -> String -> Sam
drumScale Sig
tempo Sig
pitch String
file = Sig2 -> Sam
forall a. ToSam a => a -> Sam
toSam (Sig2 -> Sam) -> Sig2 -> Sam
forall a b. (a -> b) -> a -> b
$ Sig -> Sig -> String -> Sig2
scaleDrum Sig
tempo Sig
pitch String
file
drumScale1 :: TempoSig -> PitchSig -> String -> Sam
drumScale1 :: Sig -> Sig -> String -> Sam
drumScale1 Sig
tempo Sig
pitch String
file = Sig -> Sam
forall a. ToSam a => a -> Sam
toSam (Sig -> Sam) -> Sig -> Sam
forall a b. (a -> b) -> a -> b
$ Sig -> Sig -> String -> Sig
scaleDrum1 Sig
tempo Sig
pitch String
file
harmScale :: TempoSig -> PitchSig -> String -> Sam
harmScale :: Sig -> Sig -> String -> Sam
harmScale Sig
tempo Sig
pitch String
file = Sig2 -> Sam
forall a. ToSam a => a -> Sam
toSam (Sig2 -> Sam) -> Sig2 -> Sam
forall a b. (a -> b) -> a -> b
$ Sig -> Sig -> String -> Sig2
scaleHarm Sig
tempo Sig
pitch String
file
harmScale1 :: TempoSig -> PitchSig -> String -> Sam
harmScale1 :: Sig -> Sig -> String -> Sam
harmScale1 Sig
tempo Sig
pitch String
file = Sig -> Sam
forall a. ToSam a => a -> Sam
toSam (Sig -> Sam) -> Sig -> Sam
forall a b. (a -> b) -> a -> b
$ Sig -> Sig -> String -> Sig
scaleHarm1 Sig
tempo Sig
pitch String
file