LFO: square and triangle wave now working

pull/6/head
Steve Lascos 6 years ago
parent 618d23922e
commit d954f0aced
  1. 3
      src/LibBasicFunctions.h
  2. 42
      src/common/LowFrequencyOscillator.cpp

@ -476,6 +476,9 @@ 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 float TRIANGE_POS_SLOPE = 2.0f/PI_F;
const float TRIANGE_NEG_SLOPE = -2.0f/PI_F;
};
} // BALibrary

@ -101,33 +101,27 @@ 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::RANDOM :
break;

Loading…
Cancel
Save