Fixed-capacity routing for an operator network. More...
#include <fm_operator_engine.hpp>
Public Member Functions | |
| FmOperatorRoutingT () | |
| void | clear () noexcept |
| void | set_phase_modulation_radians (std::size_t destination, std::size_t source, SampleType radians) noexcept |
| void | set_frequency_modulation_hz (std::size_t destination, std::size_t source, SampleType deviation_hz) noexcept |
| void | set_carrier_gain (std::size_t op, SampleType linear_gain) noexcept |
| SampleType | phase_modulation_radians (std::size_t destination, std::size_t source) const noexcept |
| SampleType | frequency_modulation_hz (std::size_t destination, std::size_t source) const noexcept |
| SampleType | carrier_gain (std::size_t op) const noexcept |
Static Public Attributes | |
| static constexpr SampleType | kMaxPhaseDeviationRadians |
| static constexpr SampleType | kMaxFrequencyDeviationHz = SampleType{96000} |
Fixed-capacity routing for an operator network.
Matrix indices are [destination][source]. Phase entries are radians of phase deviation per unit source output. Frequency entries are Hz of instantaneous-frequency deviation per unit source output. Both may be active on the same edge; keeping separate matrices makes the often-blurred distinction between phase modulation and frequency modulation explicit. Carrier gains are linear. When their sum exceeds unity, the engine divides the weighted output by that sum, so adding full-scale carriers does not silently change level; a sub-unity sum remains intentional attenuation.
|
inline |
|
inlinenoexcept |
|
inlinenoexcept |
|
inlinenoexcept |
|
inlinenoexcept |
|
inlinenoexcept |
|
inlinenoexcept |
|
inlinenoexcept |
|
staticconstexpr |
|
staticconstexpr |