Feature/lfo waveforms (#6)

* LFO: square and triangle wave now working

* Added LFO Sawtooth
master
Blackaddr Audio 5 years ago committed by GitHub
parent 618d23922e
commit d38be82ea6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 4
      src/LibBasicFunctions.h
  2. 49
      src/common/LowFrequencyOscillator.cpp

@ -476,6 +476,10 @@ private:
const T PI_F = 3.14159265358979323846264338327950288419716939937510582097494459230781640628620899; ///< 2*PI
const T TWO_PI_F = 2.0 * 3.14159265358979323846264338327950288419716939937510582097494459230781640628620899; ///< 2*PI
const T PI_DIV2_F = 0.5 * 3.14159265358979323846264338327950288419716939937510582097494459230781640628620899; ///< PI/2
const T THREE_PI_DIV2_F = 1.5 * 3.14159265358979323846264338327950288419716939937510582097494459230781640628620899; ///< 3*PI/2
const T TRIANGE_POS_SLOPE = 2.0f/PI_F;
const T TRIANGE_NEG_SLOPE = -2.0f/PI_F;
const T SAWTOOTH_SLOPE = -1.0f/PI_F;
};
} // BALibrary

@ -101,34 +101,35 @@ T *LowFrequencyOscillatorVector<T>::getNextVector()
break;
case Waveform::SQUARE :
for (auto i=0; i<AUDIO_BLOCK_SAMPLES; i++) {
if (m_phaseVec[i] > 3*PI_F) {
m_outputVec[i] = 0.0f;
}
else if (m_phaseVec[i] > 2*PI_F) {
m_outputVec[i] = 1.0f;
}
else if (m_phaseVec[i] > PI_F) {
m_outputVec[i] = 0.0f;
} else {
m_outputVec[i] = 1.0f;
}
if (m_phaseVec[i] < PI_F) {
m_outputVec[i] = -1.0f;
} else {
m_outputVec[i] = 1.0f;
}
}
break;
case Waveform::TRIANGLE :
// for (auto i=0; i<AUDIO_BLOCK_SAMPLES; i++) {
// if (m_phaseVec[i] > 3*PI_F) {
// m_outputVec[i] = ;
// }
// else if (m_phaseVec[i] > 2*PI_F) {
// m_outputVec[i] = 1.0f;
// }
// else if (m_phaseVec[i] > PI_F) {
// m_outputVec[i] = 0.0f;
// } else {
// m_outputVec[i] = 1.0f;
// }
// }
// A triangle is made up from two different line equations of form y=mx+b
// where m = +2/pi or -2/pi. A "Triangle Cos" starts at +1.0 and moves to
// -1.0 from angles 0 to PI radians.
for (auto i=0; i<AUDIO_BLOCK_SAMPLES; i++) {
if (m_phaseVec[i] < PI_F) {
// y = (-2/pi)*x + 1.0
m_outputVec[i] = (TRIANGE_NEG_SLOPE * m_phaseVec[i]) + 1.0f;
} else {
// y = (2/pi)*x -1.0
m_outputVec[i] = (TRIANGE_POS_SLOPE * (m_phaseVec[i]-PI_F)) - 1.0f;
}
}
break;
case Waveform::SAWTOOTH :
// A sawtooth is made up of a single equation of the form y=mx+b
// where m = -pi + 1.0
for (auto i=0; i<AUDIO_BLOCK_SAMPLES; i++) {
m_outputVec[i] = (SAWTOOTH_SLOPE * m_phaseVec[i]) + 1.0f;
}
break;
case Waveform::RANDOM :
break;
default :

Loading…
Cancel
Save