From 6b09fce36d2d548c6b5efb89e9c5b75996f15a7c Mon Sep 17 00:00:00 2001 From: root Date: Fri, 30 Aug 2019 11:31:26 -0600 Subject: [PATCH] Add self-modulation mode --- plugins/Disintegrator/Disintegrator.cpp | 19 +++++++++++++++++++ .../Disintegrator/DisintegratorControls.cpp | 1 + 2 files changed, 20 insertions(+) diff --git a/plugins/Disintegrator/Disintegrator.cpp b/plugins/Disintegrator/Disintegrator.cpp index 2498591d0..57aba185c 100644 --- a/plugins/Disintegrator/Disintegrator.cpp +++ b/plugins/Disintegrator/Disintegrator.cpp @@ -190,6 +190,25 @@ bool DisintegratorEffect::processAudioBuffer(sampleFrame* buf, const fpp_t frame newInBufLocFrac[0] = fmod(newInBufLoc[0], 1); newInBufLocFrac[1] = newInBufLocFrac[0]; + break; + } + case 3:// Self-Modulation + { + newInBufLoc[0] = (s[0] + 1) * 0.5f; + newInBufLoc[1] = (s[1] + 1) * 0.5f; + + newInBufLoc[0] = m_hp.update( newInBufLoc[0], 0 ); + newInBufLoc[0] = m_lp.update( newInBufLoc[0], 0 ); + newInBufLoc[1] = m_hp.update( newInBufLoc[1], 1 ); + newInBufLoc[1] = m_lp.update( newInBufLoc[1], 1 ); + + newInBufLoc[0] = realfmod(m_inBufLoc - newInBufLoc[0] * amount, DISINTEGRATOR_BUFFER_SIZE); + newInBufLoc[1] = realfmod(m_inBufLoc - newInBufLoc[1] * amount, DISINTEGRATOR_BUFFER_SIZE); + + // Distance between samples + newInBufLocFrac[0] = fmod(newInBufLoc[0], 1); + newInBufLocFrac[1] = fmod(newInBufLoc[1], 1); + break; } } diff --git a/plugins/Disintegrator/DisintegratorControls.cpp b/plugins/Disintegrator/DisintegratorControls.cpp index 7528066f1..b92a99db3 100644 --- a/plugins/Disintegrator/DisintegratorControls.cpp +++ b/plugins/Disintegrator/DisintegratorControls.cpp @@ -50,6 +50,7 @@ DisintegratorControls::DisintegratorControls(DisintegratorEffect* effect) : m_typeModel.addItem(tr("Mono Noise")); m_typeModel.addItem(tr("Stereo Noise")); m_typeModel.addItem(tr("Sine Wave")); + m_typeModel.addItem(tr("Self-Modulation")); connect( Engine::mixer(), SIGNAL( sampleRateChanged() ), this, SLOT( sampleRateChanged() ) ); }