28 void reset(std::uint32_t seed) { state_ = seed ? seed : 0x9E3779B9u; }
31 std::uint32_t x = state_;
40 double next_unit() {
return static_cast<double>(
next() >> 8) * (1.0 / 16777216.0); }
46 std::uint32_t state_ = 0x9E3779B9u;
59 value_ += step_size * rng.
next_bipolar() - reversion * value_;
60 if (value_ > 1.0) value_ = 1.0;
61 if (value_ < -1.0) value_ = -1.0;
65 double value()
const {
return value_; }
78 increment_ = (sample_rate > 0.0) ? hz / sample_rate : 0.0;
83 if (phase_ >= 1.0) phase_ -= std::floor(phase_);
84 return std::sin(phase_ * 6.283185307179586);
87 double phase()
const {
return phase_; }
91 double increment_ = 0.0;
113 const auto u =
static_cast<std::size_t
>(
i);
114 phase_[
u] = wrap(phase -
static_cast<double>(count_) * increment_[
u]);
115 derive(
u, wrap(phase));
120 const auto u =
static_cast<std::size_t
>(
i);
122 increment_[
u] = (sample_rate > 0.0) ? hz / sample_rate : 0.0;
123 phase_[
u] = wrap(current -
static_cast<double>(count_) * increment_[
u]);
131 phase_[
u] = wrap(phase_[
u] +
static_cast<double>(count_) * increment_[
u]);
132 derive(
u, phase_[
u]);
138 const double s = sin_[
u] * step_cos_[
u] + cos_[
u] * step_sin_[
u];
139 const double c = cos_[
u] * step_cos_[
u] - sin_[
u] * step_sin_[
u];
146 return sin_[
static_cast<std::size_t
>(
i)];
149 return cos_[
static_cast<std::size_t
>(
i)];
157 const auto u =
static_cast<std::size_t
>(
i);
158 return wrap(phase_[
u] +
static_cast<double>(count_) * increment_[
u]);
162 static constexpr double kTwoPi = 6.283185307179586;
164 static double wrap(
double phase) {
165 return phase - std::floor(phase);
168 void derive(std::size_t
u,
double position) {
171 step_sin_[
u] = std::sin(increment_[
u] * kTwoPi);
172 step_cos_[
u] = std::cos(increment_[
u] * kTwoPi);
177 std::array<double, N> phase_{};
178 std::array<double, N> increment_{};
179 std::array<double, N> sin_{};
180 std::array<double, N> cos_{};
181 std::array<double, N> step_sin_{};
182 std::array<double, N> step_cos_{};
208 rng_[
i].reset(kSeedBase +
static_cast<std::uint32_t
>(
i) * kSeedStride);
213 osc_.reset(
i,
static_cast<double>(
i) /
static_cast<double>(
kNumChannels));
220 ?
static_cast<double>(
i) /
237 const double* s = osc_.sin_data();
243 static constexpr std::uint32_t kSeedBase = 0x1234567u;
244 static constexpr std::uint32_t kSeedStride = 0x9E3779B9u;
246 std::array<XorShift32, kNumChannels> rng_{};
247 std::array<MeanRevertingWalk, kNumChannels> walk_{};
248 QuadratureBank<kNumChannels> osc_{};
Definition modulation.hpp:201
void configure(double tank_rate)
Definition modulation.hpp:217
void reset()
Definition modulation.hpp:205
void tick(double *out)
Definition modulation.hpp:235
void step_walks()
Definition modulation.hpp:228
Definition modulation.hpp:53
void reset()
Definition modulation.hpp:55
double value() const
Definition modulation.hpp:65
double step(XorShift32 &rng, double reversion, double step_size)
Definition modulation.hpp:58
Definition modulation.hpp:73
double phase() const
Definition modulation.hpp:87
double tick()
Definition modulation.hpp:81
void set_rate(double hz, double sample_rate)
Definition modulation.hpp:77
void reset(double phase=0.0)
Definition modulation.hpp:75
Definition modulation.hpp:103
const double * sin_data() const
Definition modulation.hpp:151
void restart()
Definition modulation.hpp:107
double position(int i) const
Definition modulation.hpp:156
void tick()
Definition modulation.hpp:128
double sin(int i) const
Definition modulation.hpp:145
double cos(int i) const
Definition modulation.hpp:148
void set_rate(int i, double hz, double sample_rate)
Definition modulation.hpp:119
void reset(int i, double phase)
Definition modulation.hpp:112
Definition modulation.hpp:23
XorShift32(std::uint32_t seed)
Definition modulation.hpp:26
double next_unit()
Definition modulation.hpp:40
double next_bipolar()
Definition modulation.hpp:43
void reset(std::uint32_t seed)
Definition modulation.hpp:28
std::uint32_t next()
Definition modulation.hpp:30
double mod_depth_shrink(double decay_seconds)
Definition modulation.hpp:189
constexpr double kWalkStep
Definition config.hpp:93
constexpr double kWalkReversion
Definition config.hpp:92
constexpr double kModRateMinHz
Definition config.hpp:79
constexpr double kModWalkMix
Definition config.hpp:78
constexpr int kNumChannels
Definition config.hpp:18
@ tank_rate
Definition config.hpp:226
constexpr double kModRateMaxHz
Definition config.hpp:80
constexpr int kOscReanchorSamples
Definition config.hpp:202
constexpr double kModSineMix
Definition config.hpp:77
constexpr double kModShrinkMinSeconds
Definition config.hpp:88
constexpr double kModShrinkFloor
Definition config.hpp:89
constexpr double kModShrinkFullSeconds
Definition config.hpp:87
@ c
Definition spectrum_trace.hpp:35
@ u
Definition formant_filter_bank.hpp:20
@ i
Definition formant_filter_bank.hpp:20