commit 04d2087a9c3acea15469a769eee445247de44436
parent f73f703f66f3e3943339b6ce81d0692fb498d8e8
Author: Matt Demanett <matt@demanett.net>
Date: Mon, 23 Apr 2018 23:57:05 -0400
Oscillators: fix max frequency; fine control to +/-1 semitone.
Diffstat:
4 files changed, 8 insertions(+), 8 deletions(-)
diff --git a/src/Additator.cpp b/src/Additator.cpp
@@ -10,7 +10,7 @@ void Additator::onReset() {
void Additator::onSampleRateChange() {
float sampleRate = engineGetSampleRate();
_oscillator.setSampleRate(sampleRate);
- _maxFrequency = 0.47f * sampleRate;
+ _maxFrequency = 0.475f * sampleRate;
_steps = modulationSteps;
_phase = PHASE_RESET;
_widthSL.setParams(sampleRate, slewLimitTime);;
@@ -119,7 +119,7 @@ void Additator::step() {
}
float frequency = params[FREQUENCY_PARAM].value;
- frequency += params[FINE_PARAM].value;
+ frequency += params[FINE_PARAM].value / 12.0f;;
if (inputs[PITCH_INPUT].active) {
frequency += clamp(inputs[PITCH_INPUT].value, -5.0f, 5.0f);
}
diff --git a/src/FMOp.cpp b/src/FMOp.cpp
@@ -15,7 +15,7 @@ void FMOp::onSampleRateChange() {
_phasor.setSampleRate(sampleRate);
_sineTable.setSampleRate(sampleRate);
_decimator.setParams(sampleRate, oversample);
- _maxFrequency = 0.47f * sampleRate;
+ _maxFrequency = 0.475f * sampleRate;
_feedbackSL.setParams(sampleRate, slewLimitTime);
_depthSL.setParams(sampleRate, slewLimitTime);
_levelSL.setParams(sampleRate, slewLimitTime);
@@ -55,7 +55,7 @@ void FMOp::step() {
ratio += 1.0f;
}
float frequency = pitchIn;
- frequency += params[FINE_PARAM].value;
+ frequency += params[FINE_PARAM].value / 12.0f;
frequency = cvToFrequency(frequency);
frequency *= ratio;
frequency = clamp(frequency, -_maxFrequency, _maxFrequency);
diff --git a/src/VCO.cpp b/src/VCO.cpp
@@ -30,7 +30,7 @@ void VCO::step() {
_modulationStep = 0;
_baseVOct = params[FREQUENCY_PARAM].value;
- _baseVOct += params[FINE_PARAM].value;
+ _baseVOct += params[FINE_PARAM].value / 12.0f;
if (inputs[PITCH_INPUT].active) {
_baseVOct += clamp(inputs[PITCH_INPUT].value, -5.0f, 5.0f);
}
@@ -144,7 +144,7 @@ void VCO::setSampleRate(float sampleRate) {
}
void VCO::setFrequency(float frequency) {
- if (_frequency != frequency && frequency < 0.47f * _phasor._sampleRate) {
+ if (_frequency != frequency && frequency < 0.475f * _phasor._sampleRate) {
_frequency = frequency;
_phasor.setFrequency(_frequency / (float)oversample);
_square.setFrequency(_frequency);
diff --git a/src/XCO.cpp b/src/XCO.cpp
@@ -31,7 +31,7 @@ void XCO::step() {
_modulationStep = 0;
_baseVOct = params[FREQUENCY_PARAM].value;
- _baseVOct += params[FINE_PARAM].value;
+ _baseVOct += params[FINE_PARAM].value / 12.0f;;
if (inputs[PITCH_INPUT].active) {
_baseVOct += clamp(inputs[PITCH_INPUT].value, -5.0f, 5.0f);
}
@@ -241,7 +241,7 @@ void XCO::setSampleRate(float sampleRate) {
}
void XCO::setFrequency(float frequency) {
- if (_frequency != frequency && frequency < 0.47f * _phasor._sampleRate) {
+ if (_frequency != frequency && frequency < 0.475f * _phasor._sampleRate) {
_frequency = frequency;
_phasor.setFrequency(_frequency / (float)oversample);
_square.setFrequency(_frequency);