Portability | requires multi-parameter type classes |
---|---|

Stability | provisional |

Maintainer | synthesizer@henning-thielemann.de |

Safe Haskell | None |

This module contains various oscillators that respect physical dimensions.
By using the type variable `amp`

we show,
that the oscillators are homogeneous functions.
But since there are even no restrictions on the sample type,
we even show that values from the waveform
go untouched to the output signal.

- static :: (C t, C u) => T t (T amp y) -> T t -> T (Recip u) t -> T s u t (Signal s amp y)
- freqMod :: (C t, C u) => T t (T amp y) -> T t -> T s u t (R s (Recip u) t t -> Signal s amp y)
- phaseMod :: (C t flat, C t, C u) => T t (T amp y) -> T (Recip u) t -> T s u t (Signal s flat t -> Signal s amp y)
- phaseFreqMod :: (C t flat, C t, C u) => T t (T amp y) -> T s u t (Signal s flat t -> R s (Recip u) t t -> Signal s amp y)
- shapeMod :: (C t, C u) => T (T cAmp c) t (T amp y) -> T t -> T (Recip u) t -> T s u t (Signal s cAmp c -> Signal s amp y)
- shapeFreqMod :: (C t, C u) => T (T cAmp c) t (T amp y) -> T t -> T s u t (Signal s cAmp c -> R s (Recip u) t t -> Signal s amp y)
- staticSample :: (C t, C u) => T t y -> T rate amp (T (T y)) -> T t -> T (Recip u) t -> T s u t (Signal s amp y)
- freqModSample :: (C t, C u) => T t y -> T rate amp (T (T y)) -> T t -> T s u t (R s (Recip u) t t -> Signal s amp y)
- shapeFreqModFromSampledTone :: (C t, Transform storage yv, C u, C t flat) => T t yv -> T t yv -> T (Recip u) t -> T (Dimensional u t) amp (T yv) -> t -> T t -> T s u t (Signal s flat t -> R s (Recip u) t t -> Signal s amp yv)
- shapePhaseFreqModFromSampledTone :: (C t, Transform storage yv, C u, C t flatS, C t flatP) => T t yv -> T t yv -> T (Recip u) t -> T (Dimensional u t) amp (T yv) -> t -> T t -> T s u t (Signal s flatS t -> Signal s flatP t -> R s (Recip u) t t -> Signal s amp yv)

# Oscillators with constant waveforms

:: (C t, C u) | |

=> T t (T amp y) | waveform |

-> T t | start phase |

-> T (Recip u) t | frequency |

-> T s u t (Signal s amp y) |

oscillator with a functional waveform with constant frequency

:: (C t, C u) | |

=> T t (T amp y) | waveform |

-> T t | start phase |

-> T s u t (R s (Recip u) t t -> Signal s amp y) |

oscillator with a functional waveform with modulated frequency

:: (C t flat, C t, C u) | |

=> T t (T amp y) | waveform |

-> T (Recip u) t | frequency |

-> T s u t (Signal s flat t -> Signal s amp y) |

oscillator with modulated phase

:: (C t flat, C t, C u) | |

=> T t (T amp y) | waveform |

-> T s u t (Signal s flat t -> R s (Recip u) t t -> Signal s amp y) |

oscillator with a functional waveform with modulated phase and frequency

:: (C t, C u) | |

=> T (T cAmp c) t (T amp y) | waveform |

-> T t | phase |

-> T (Recip u) t | frequency |

-> T s u t (Signal s cAmp c -> Signal s amp y) |

oscillator with modulated shape

:: (C t, C u) | |

=> T (T cAmp c) t (T amp y) | waveform |

-> T t | phase |

-> T s u t (Signal s cAmp c -> R s (Recip u) t t -> Signal s amp y) |

oscillator with both shape and frequency modulation

:: (C t, C u) | |

=> T t y | |

-> T rate amp (T (T y)) | waveform |

-> T t | start phase |

-> T (Recip u) t | frequency |

-> T s u t (Signal s amp y) |

oscillator with a sampled waveform with constant frequency
This is essentially an interpolation with cyclic padding.
You can also achieve this with a waveform constructed by `sample`

.

:: (C t, C u) | |

=> T t y | |

-> T rate amp (T (T y)) | waveform |

-> T t | start phase |

-> T s u t (R s (Recip u) t t -> Signal s amp y) |

oscillator with a sampled waveform with modulated frequency Should behave homogenously for different types of interpolation.