From 425a182de0f4c37f46001712cdf748ee305074ee Mon Sep 17 00:00:00 2001 From: Paul LaMendola Date: Wed, 23 Jun 2021 00:30:54 -0400 Subject: [PATCH] Add triangle waveform to Tone Generator. Signed-off-by: Panagiotis Vasilopoulos --- src/effects/ToneGen.cpp | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/effects/ToneGen.cpp b/src/effects/ToneGen.cpp index f7f93228c..0fdf24cf5 100644 --- a/src/effects/ToneGen.cpp +++ b/src/effects/ToneGen.cpp @@ -56,6 +56,7 @@ enum kWaveforms kSquare, kSawtooth, kSquareNoAlias, + kTriangle, nWaveforms }; @@ -64,7 +65,8 @@ static const EnumValueSymbol kWaveStrings[nWaveforms] = { XO("Sine") }, { XO("Square") }, { XO("Sawtooth") }, - { XO("Square, no alias") } + { XO("Square, no alias") }, + { XO("Triangle") } }; // Define keys, defaults, minimums, and maximums for the effect parameters @@ -225,6 +227,16 @@ size_t EffectToneGen::ProcessBlock(float **WXUNUSED(inBlock), float **outBlock, case kSawtooth: f = (2.0 * modf(mPositionInCycles / mSampleRate + 0.5, &throwaway)) - 1.0; break; + case kTriangle: + f = modf(mPositionInCycles / mSampleRate, &throwaway); + if(f < 0.25) { + f *= 4.0; + } else if(f > 0.75) { + f = (f - 1.0) * 4.0; + } else { /* f >= 0.25 || f <= 0.75 */ + f = (0.5 - f) * 4.0; + } + break; case kSquareNoAlias: // Good down to 110Hz @ 44100Hz sampling. //do fundamental (k=1) outside loop b = (1.0 + cos((pre2PI * BlendedFrequency) / mSampleRate)) / pre4divPI; //scaling