module Csound.Air.Wave.Sync(
SyncSmooth(..),
sawSync, isawSync, pulseSync, sqrSync, triSync, bloscSync,
sawSync', isawSync', pulseSync', sqrSync', triSync', bloscSync',
rndSawSync, rndIsawSync, rndPulseSync, rndSqrSync, rndTriSync, rndBloscSync,
sawSyncAbs, isawSyncAbs, pulseSyncAbs, sqrSyncAbs, triSyncAbs, bloscSyncAbs,
sawSyncAbs', isawSyncAbs', pulseSyncAbs', sqrSyncAbs', triSyncAbs', bloscSyncAbs',
sawSyncBy, isawSyncBy, pulseSyncBy, sqrSyncBy, triSyncBy, bloscSyncBy,
sawSyncBy', isawSyncBy', pulseSyncBy', sqrSyncBy', triSyncBy', bloscSyncBy',
sawSyncAbsBy, isawSyncAbsBy, pulseSyncAbsBy, sqrSyncAbsBy, triSyncAbsBy, bloscSyncAbsBy,
sawSyncAbsBy', isawSyncAbsBy', pulseSyncAbsBy', sqrSyncAbsBy', triSyncAbsBy', bloscSyncAbsBy',
rawTriSync, rawSqrSync, rawSawSync, rawPwSync,
rawTriSyncBy, rawSqrSyncBy, rawSawSyncBy, rawPwSyncBy,
rawTriSyncAbs, rawSqrSyncAbs, rawSawSyncAbs, rawPwSyncAbs,
rawTriSyncAbsBy, rawSqrSyncAbsBy, rawSawSyncAbsBy, rawPwSyncAbsBy,
softSync, rawSoftSync, softSyncBy, rawSoftSyncBy,
softSyncAbs, rawSoftSyncAbs, softSyncAbsBy, rawSoftSyncAbsBy
) where
import Data.Default
import Csound.Typed
import Csound.Typed.Opcode hiding (lfo, tab)
import Csound.Tab
import Csound.Air.Wave
rndPhsSync :: (D -> Sig -> Sig -> Sig) -> (Sig -> Sig -> SE Sig)
rndPhsSync :: (D -> Sig -> Sig -> Sig) -> Sig -> Sig -> SE Sig
rndPhsSync D -> Sig -> Sig -> Sig
f Sig
ratio Sig
cps = (D -> Sig) -> SE D -> SE Sig
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (\D
x -> D -> Sig -> Sig -> Sig
f D
x Sig
ratio Sig
cps) (SE D -> SE Sig) -> SE D -> SE Sig
forall a b. (a -> b) -> a -> b
$ D -> SE D
forall a. SigOrD a => a -> SE a
rnd D
1
rndSawSync :: Sig -> Sig -> SE Sig
rndSawSync :: Sig -> Sig -> SE Sig
rndSawSync = (D -> Sig -> Sig -> Sig) -> Sig -> Sig -> SE Sig
rndPhsSync D -> Sig -> Sig -> Sig
sawSync'
rndIsawSync :: Sig -> Sig -> SE Sig
rndIsawSync :: Sig -> Sig -> SE Sig
rndIsawSync = (D -> Sig -> Sig -> Sig) -> Sig -> Sig -> SE Sig
rndPhsSync D -> Sig -> Sig -> Sig
isawSync'
rndPulseSync :: Sig -> Sig -> SE Sig
rndPulseSync :: Sig -> Sig -> SE Sig
rndPulseSync = (D -> Sig -> Sig -> Sig) -> Sig -> Sig -> SE Sig
rndPhsSync D -> Sig -> Sig -> Sig
pulseSync'
rndSqrSync :: Sig -> Sig -> SE Sig
rndSqrSync :: Sig -> Sig -> SE Sig
rndSqrSync = (D -> Sig -> Sig -> Sig) -> Sig -> Sig -> SE Sig
rndPhsSync D -> Sig -> Sig -> Sig
sqrSync'
rndTriSync :: Sig -> Sig -> SE Sig
rndTriSync :: Sig -> Sig -> SE Sig
rndTriSync = (D -> Sig -> Sig -> Sig) -> Sig -> Sig -> SE Sig
rndPhsSync D -> Sig -> Sig -> Sig
triSync'
rndBloscSync :: Tab -> Sig -> Sig -> SE Sig
rndBloscSync :: Tab -> Sig -> Sig -> SE Sig
rndBloscSync Tab
t = (D -> Sig -> Sig -> Sig) -> Sig -> Sig -> SE Sig
rndPhsSync (Tab -> D -> Sig -> Sig -> Sig
bloscSync' Tab
t)
rawTriSyncBy :: SyncSmooth -> Sig -> Sig -> Sig
rawTriSyncBy :: SyncSmooth -> Sig -> Sig -> Sig
rawTriSyncBy = Tab -> SyncSmooth -> Sig -> Sig -> Sig
oscSyncBy Tab
triTab
rawSqrSyncBy :: SyncSmooth -> Sig -> Sig -> Sig
rawSqrSyncBy :: SyncSmooth -> Sig -> Sig -> Sig
rawSqrSyncBy = Tab -> SyncSmooth -> Sig -> Sig -> Sig
oscSyncBy Tab
sqrTab
rawSawSyncBy :: SyncSmooth -> Sig -> Sig -> Sig
rawSawSyncBy :: SyncSmooth -> Sig -> Sig -> Sig
rawSawSyncBy = Tab -> SyncSmooth -> Sig -> Sig -> Sig
oscSyncBy Tab
sawTab
rawPwSyncBy :: Double -> SyncSmooth -> Sig -> Sig -> Sig
rawPwSyncBy :: Double -> SyncSmooth -> Sig -> Sig -> Sig
rawPwSyncBy Double
duty = Tab -> SyncSmooth -> Sig -> Sig -> Sig
oscSyncBy (Double -> Tab
pwTab Double
duty)
rawTriSync :: Sig -> Sig -> Sig
rawTriSync :: Sig -> Sig -> Sig
rawTriSync = SyncSmooth -> Sig -> Sig -> Sig
rawTriSyncBy SyncSmooth
forall a. Default a => a
def
rawSqrSync :: Sig -> Sig -> Sig
rawSqrSync :: Sig -> Sig -> Sig
rawSqrSync = SyncSmooth -> Sig -> Sig -> Sig
rawSqrSyncBy SyncSmooth
forall a. Default a => a
def
rawSawSync :: Sig -> Sig -> Sig
rawSawSync :: Sig -> Sig -> Sig
rawSawSync = SyncSmooth -> Sig -> Sig -> Sig
rawSawSyncBy SyncSmooth
forall a. Default a => a
def
rawPwSync :: Double -> Sig -> Sig -> Sig
rawPwSync :: Double -> Sig -> Sig -> Sig
rawPwSync Double
duty = Double -> SyncSmooth -> Sig -> Sig -> Sig
rawPwSyncBy Double
duty SyncSmooth
forall a. Default a => a
def
rawTriSyncAbsBy :: SyncSmooth -> Sig -> Sig -> Sig
rawTriSyncAbsBy :: SyncSmooth -> Sig -> Sig -> Sig
rawTriSyncAbsBy = Tab -> SyncSmooth -> Sig -> Sig -> Sig
oscSyncAbsBy Tab
triTab
rawSqrSyncAbsBy :: SyncSmooth -> Sig -> Sig -> Sig
rawSqrSyncAbsBy :: SyncSmooth -> Sig -> Sig -> Sig
rawSqrSyncAbsBy = Tab -> SyncSmooth -> Sig -> Sig -> Sig
oscSyncAbsBy Tab
sqrTab
rawSawSyncAbsBy :: SyncSmooth -> Sig -> Sig -> Sig
rawSawSyncAbsBy :: SyncSmooth -> Sig -> Sig -> Sig
rawSawSyncAbsBy = Tab -> SyncSmooth -> Sig -> Sig -> Sig
oscSyncAbsBy Tab
sawTab
rawPwSyncAbsBy :: Double -> SyncSmooth -> Sig -> Sig -> Sig
rawPwSyncAbsBy :: Double -> SyncSmooth -> Sig -> Sig -> Sig
rawPwSyncAbsBy Double
duty = Tab -> SyncSmooth -> Sig -> Sig -> Sig
oscSyncAbsBy (Double -> Tab
pwTab Double
duty)
rawTriSyncAbs :: Sig -> Sig -> Sig
rawTriSyncAbs :: Sig -> Sig -> Sig
rawTriSyncAbs = SyncSmooth -> Sig -> Sig -> Sig
rawTriSyncAbsBy SyncSmooth
forall a. Default a => a
def
rawSqrSyncAbs :: Sig -> Sig -> Sig
rawSqrSyncAbs :: Sig -> Sig -> Sig
rawSqrSyncAbs = SyncSmooth -> Sig -> Sig -> Sig
rawSqrSyncAbsBy SyncSmooth
forall a. Default a => a
def
rawSawSyncAbs :: Sig -> Sig -> Sig
rawSawSyncAbs :: Sig -> Sig -> Sig
rawSawSyncAbs = SyncSmooth -> Sig -> Sig -> Sig
rawSawSyncAbsBy SyncSmooth
forall a. Default a => a
def
rawPwSyncAbs :: Double -> Sig -> Sig -> Sig
rawPwSyncAbs :: Double -> Sig -> Sig -> Sig
rawPwSyncAbs Double
duty = Double -> SyncSmooth -> Sig -> Sig -> Sig
rawPwSyncAbsBy Double
duty SyncSmooth
forall a. Default a => a
def
oscSyncBy :: Tab -> SyncSmooth -> Sig -> Sig -> Sig
oscSyncBy :: Tab -> SyncSmooth -> Sig -> Sig -> Sig
oscSyncBy Tab
tab SyncSmooth
smoothType Sig
cpsRatio Sig
cps = Tab -> SyncSmooth -> Sig -> Sig -> Sig
oscSyncAbsBy Tab
tab SyncSmooth
smoothType (Sig
cpsRatio Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
cps) Sig
cps
oscSyncAbsBy :: Tab -> SyncSmooth -> Sig -> Sig -> Sig
oscSyncAbsBy :: Tab -> SyncSmooth -> Sig -> Sig -> Sig
oscSyncAbsBy Tab
tab SyncSmooth
smoothType Sig
slaveCps Sig
cps = (\Sig -> Sig -> Sig
smoothFun -> (Sig -> Sig -> Sig) -> Tab -> Sig -> Sig -> Sig
syncOsc Sig -> Sig -> Sig
smoothFun Tab
tab (Sig -> Sig
ar Sig
slaveCps) (Sig -> Sig
ar Sig
cps)) ((Sig -> Sig -> Sig) -> Sig) -> (Sig -> Sig -> Sig) -> Sig
forall a b. (a -> b) -> a -> b
$ case SyncSmooth
smoothType of
SyncSmooth
RawSync -> (\Sig
_ Sig
_ -> Sig
1)
SyncSmooth
SawSync -> (\Sig
amaster Sig
_ -> (Sig
1 Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
- Sig
amaster))
SyncSmooth
TriSync -> ((Sig -> Sig) -> Sig -> Sig -> Sig
forall a b. a -> b -> a
const ((Sig -> Sig) -> Sig -> Sig -> Sig)
-> (Sig -> Sig) -> Sig -> Sig -> Sig
forall a b. (a -> b) -> a -> b
$ Tab -> Sig -> Sig
forall a. (Tuple a, SigOrD a) => Tab -> a -> a
readSync Tab
uniTriTab)
SyncSmooth
TrapSync -> ((Sig -> Sig) -> Sig -> Sig -> Sig
forall a b. a -> b -> a
const ((Sig -> Sig) -> Sig -> Sig -> Sig)
-> (Sig -> Sig) -> Sig -> Sig -> Sig
forall a b. (a -> b) -> a -> b
$ Tab -> Sig -> Sig
forall a. (Tuple a, SigOrD a) => Tab -> a -> a
readSync Tab
uniTrapTab)
UserSync Tab
genTab -> ((Sig -> Sig) -> Sig -> Sig -> Sig
forall a b. a -> b -> a
const ((Sig -> Sig) -> Sig -> Sig -> Sig)
-> (Sig -> Sig) -> Sig -> Sig -> Sig
forall a b. (a -> b) -> a -> b
$ Tab -> Sig -> Sig
forall a. (Tuple a, SigOrD a) => Tab -> a -> a
readSync Tab
genTab)
where
readSync :: Tab -> a -> a
readSync Tab
ft a
async = a -> Tab -> a
forall a. SigOrD a => a -> Tab -> a
table3 a
async Tab
ft a -> D -> a
forall a. Tuple a => a -> D -> a
`withD` D
1
uniSawTab, uniTriTab, uniTrapTab :: Tab
uniSawTab :: Tab
uniSawTab = Int -> Tab -> Tab
setSize Int
4097 (Tab -> Tab) -> Tab -> Tab
forall a b. (a -> b) -> a -> b
$ [Double] -> Tab
elins [Double
1, Double
0]
uniTriTab :: Tab
uniTriTab = Int -> Tab -> Tab
setSize Int
4097 (Tab -> Tab) -> Tab -> Tab
forall a b. (a -> b) -> a -> b
$ [Double] -> Tab
elins [Double
0, Double
1, Double
0]
uniTrapTab :: Tab
uniTrapTab = Int -> Tab -> Tab
setSize Int
4097 (Tab -> Tab) -> Tab -> Tab
forall a b. (a -> b) -> a -> b
$ [Double] -> Tab
elins [Double
1, Double
1, Double
0]
syncOsc :: (Sig -> Sig -> Sig) -> Tab -> Sig -> Sig -> Sig
syncOsc :: (Sig -> Sig -> Sig) -> Tab -> Sig -> Sig -> Sig
syncOsc Sig -> Sig -> Sig
smoothFun Tab
ftab Sig
slaveCps Sig
cps = Sig -> Sig
dcblock (Sig -> Sig) -> Sig -> Sig
forall a b. (a -> b) -> a -> b
$ Sig
aout
where
(Sig
amaster, Sig
asyncMaster) = Sig -> Sig -> (Sig, Sig)
syncphasor Sig
cps Sig
0
(Sig
aslave, Sig
_asyncSlave) = Sig -> Sig -> (Sig, Sig)
syncphasor Sig
slaveCps Sig
asyncMaster
aosc :: Sig
aosc = Sig -> Tab -> Sig
forall a. SigOrD a => a -> Tab -> a
table3 Sig
aslave Tab
ftab Sig -> D -> Sig
forall a. Tuple a => a -> D -> a
`withD` D
1
aout :: Sig
aout = Sig
aosc Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig -> Sig -> Sig
smoothFun Sig
amaster Sig
asyncMaster
softSync :: SigSpace a => (Sig -> a) -> Sig -> (Sig -> a)
softSync :: (Sig -> a) -> Sig -> Sig -> a
softSync = SyncSmooth -> (Sig -> a) -> Sig -> Sig -> a
forall a. SigSpace a => SyncSmooth -> (Sig -> a) -> Sig -> Sig -> a
softSyncBy SyncSmooth
forall a. Default a => a
def
rawSoftSync :: SigSpace a => (Sig -> a) -> Sig -> (Sig -> a)
rawSoftSync :: (Sig -> a) -> Sig -> Sig -> a
rawSoftSync = SyncSmooth -> (Sig -> a) -> Sig -> Sig -> a
forall a. SigSpace a => SyncSmooth -> (Sig -> a) -> Sig -> Sig -> a
rawSoftSyncBy SyncSmooth
forall a. Default a => a
def
softSyncBy :: SigSpace a => SyncSmooth -> (Sig -> a) -> Sig -> (Sig -> a)
softSyncBy :: SyncSmooth -> (Sig -> a) -> Sig -> Sig -> a
softSyncBy = (Sig -> Sig)
-> (Tab -> Sig -> Sig)
-> SyncSmooth
-> (Sig -> a)
-> Sig
-> Sig
-> a
forall a.
SigSpace a =>
(Sig -> Sig)
-> (Tab -> Sig -> Sig)
-> SyncSmooth
-> (Sig -> a)
-> Sig
-> Sig
-> a
genSoftSync Sig -> Sig
sqr Tab -> Sig -> Sig
blosc
rawSoftSyncBy :: SigSpace a => SyncSmooth -> (Sig -> a) -> Sig -> (Sig -> a)
rawSoftSyncBy :: SyncSmooth -> (Sig -> a) -> Sig -> Sig -> a
rawSoftSyncBy = (Sig -> Sig)
-> (Tab -> Sig -> Sig)
-> SyncSmooth
-> (Sig -> a)
-> Sig
-> Sig
-> a
forall a.
SigSpace a =>
(Sig -> Sig)
-> (Tab -> Sig -> Sig)
-> SyncSmooth
-> (Sig -> a)
-> Sig
-> Sig
-> a
genSoftSync Sig -> Sig
rawSqr Tab -> Sig -> Sig
oscBy
softSyncAbs :: SigSpace a => (Sig -> a) -> Sig -> (Sig -> a)
softSyncAbs :: (Sig -> a) -> Sig -> Sig -> a
softSyncAbs = SyncSmooth -> (Sig -> a) -> Sig -> Sig -> a
forall a. SigSpace a => SyncSmooth -> (Sig -> a) -> Sig -> Sig -> a
softSyncAbsBy SyncSmooth
forall a. Default a => a
def
rawSoftSyncAbs :: SigSpace a => (Sig -> a) -> Sig -> (Sig -> a)
rawSoftSyncAbs :: (Sig -> a) -> Sig -> Sig -> a
rawSoftSyncAbs = SyncSmooth -> (Sig -> a) -> Sig -> Sig -> a
forall a. SigSpace a => SyncSmooth -> (Sig -> a) -> Sig -> Sig -> a
rawSoftSyncAbsBy SyncSmooth
forall a. Default a => a
def
softSyncAbsBy :: SigSpace a => SyncSmooth -> (Sig -> a) -> Sig -> (Sig -> a)
softSyncAbsBy :: SyncSmooth -> (Sig -> a) -> Sig -> Sig -> a
softSyncAbsBy = (Sig -> Sig)
-> (Tab -> Sig -> Sig)
-> SyncSmooth
-> (Sig -> a)
-> Sig
-> Sig
-> a
forall a.
SigSpace a =>
(Sig -> Sig)
-> (Tab -> Sig -> Sig)
-> SyncSmooth
-> (Sig -> a)
-> Sig
-> Sig
-> a
genSoftSyncAbs Sig -> Sig
sqr Tab -> Sig -> Sig
blosc
rawSoftSyncAbsBy :: SigSpace a => SyncSmooth -> (Sig -> a) -> Sig -> (Sig -> a)
rawSoftSyncAbsBy :: SyncSmooth -> (Sig -> a) -> Sig -> Sig -> a
rawSoftSyncAbsBy = (Sig -> Sig)
-> (Tab -> Sig -> Sig)
-> SyncSmooth
-> (Sig -> a)
-> Sig
-> Sig
-> a
forall a.
SigSpace a =>
(Sig -> Sig)
-> (Tab -> Sig -> Sig)
-> SyncSmooth
-> (Sig -> a)
-> Sig
-> Sig
-> a
genSoftSyncAbs Sig -> Sig
rawSqr Tab -> Sig -> Sig
oscBy
genSoftSync :: SigSpace a => (Sig -> Sig) -> (Tab -> Sig -> Sig) -> SyncSmooth -> (Sig -> a) -> Sig -> (Sig -> a)
genSoftSync :: (Sig -> Sig)
-> (Tab -> Sig -> Sig)
-> SyncSmooth
-> (Sig -> a)
-> Sig
-> Sig
-> a
genSoftSync Sig -> Sig
cpsSwitchWave Tab -> Sig -> Sig
smoothTabWave SyncSmooth
smoothType Sig -> a
wave Sig
ratio Sig
cps = (Sig -> Sig)
-> (Tab -> Sig -> Sig)
-> SyncSmooth
-> (Sig -> a)
-> Sig
-> Sig
-> a
forall a.
SigSpace a =>
(Sig -> Sig)
-> (Tab -> Sig -> Sig)
-> SyncSmooth
-> (Sig -> a)
-> Sig
-> Sig
-> a
genSoftSyncAbs Sig -> Sig
cpsSwitchWave Tab -> Sig -> Sig
smoothTabWave SyncSmooth
smoothType Sig -> a
wave (Sig
ratio Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* Sig
cps) Sig
cps
genSoftSyncAbs :: SigSpace a => (Sig -> Sig) -> (Tab -> Sig -> Sig) -> SyncSmooth -> (Sig -> a) -> Sig -> (Sig -> a)
genSoftSyncAbs :: (Sig -> Sig)
-> (Tab -> Sig -> Sig)
-> SyncSmooth
-> (Sig -> a)
-> Sig
-> Sig
-> a
genSoftSyncAbs Sig -> Sig
cpsSwitchWave Tab -> Sig -> Sig
smoothTabWave SyncSmooth
smoothType Sig -> a
wave Sig
slaveCps Sig
cps = (Sig -> a -> a) -> a -> Sig -> a
forall a b c. (a -> b -> c) -> b -> a -> c
flip Sig -> a -> a
forall a. SigSpace a => Sig -> a -> a
mul a
rawSync (Sig -> a) -> Sig -> a
forall a b. (a -> b) -> a -> b
$ case SyncSmooth
smoothType of
SyncSmooth
RawSync -> Sig
1
SyncSmooth
SawSync -> Tab -> Sig -> Sig
smoothTabWave Tab
uniSawTab Sig
cps
SyncSmooth
TriSync -> Tab -> Sig -> Sig
smoothTabWave Tab
uniTriTab Sig
cps
SyncSmooth
TrapSync -> Tab -> Sig -> Sig
smoothTabWave Tab
uniTrapTab Sig
cps
UserSync Tab
t -> Tab -> Sig -> Sig
smoothTabWave Tab
t Sig
cps
where
rawSync :: a
rawSync = Sig -> a
wave (Sig -> Sig
ar (Sig -> Sig) -> Sig -> Sig
forall a b. (a -> b) -> a -> b
$ Sig -> Sig
ar Sig
slaveCps Sig -> Sig -> Sig
forall a. Num a => a -> a -> a
* (Sig -> Sig
ar (Sig -> Sig) -> Sig -> Sig
forall a b. (a -> b) -> a -> b
$ Sig -> Sig
cpsSwitchWave Sig
cps))