feat: improve oscillator initialization values and LFO sync implementation with bar tracking

This commit is contained in:
Liam Kerr 2026-08-12 01:27:00 +01:00
parent d8c1c90f15
commit 062d1e074c
3 changed files with 32 additions and 28 deletions

View file

@ -4,13 +4,17 @@
Oscillator::Oscillator(float initFreq)
: freq_(initFreq), gain_(100.0f), waveShape_(kWaveShapeSine),
sampleRate_(48000.f), phase_(0.0f), inc_(0.0f) {
sampleRate_(48000.f), phase_(0.0f), inc_(0.0f)
{
recalc_();
};
void Oscillator::process(float *out, uint32_t frames) {
for (uint32_t i = 0; i < frames; ++i) {
switch (waveShape_) {
void Oscillator::process(float *out, uint32_t frames)
{
for (uint32_t i = 0; i < frames; ++i)
{
switch (waveShape_)
{
default:
case kWaveShapeSine:
out[i] = std::sinf(phase_ * 2.0f * M_PI) * gain_;
@ -26,17 +30,21 @@ void Oscillator::reset() { phase_ = 0; }
void Oscillator::recalc_() { inc_ = freq_ / sampleRate_; }
void Oscillator::setFrequency(float newFreq) {
void Oscillator::setFrequency(float newFreq)
{
freq_ = std::fmax(newFreq, 0.0f);
recalc_();
}
float Oscillator::getFrequency() const { return freq_; };
void Oscillator::setGain(float newGain) {
void Oscillator::setGain(float newGain)
{
gain_ = newGain > 0 ? newGain : 1.0f;
}
float Oscillator::getGain() const { return gain_; };
void Oscillator::setSampleRate(float newSampleRate) {
void Oscillator::setSampleRate(float newSampleRate)
{
sampleRate_ = newSampleRate > 0 ? newSampleRate : 48000.0f;
recalc_();
}