From c6a61cb94cfda1ffb724fe44d7b9d0e653a9732c Mon Sep 17 00:00:00 2001 From: f4exb Date: Wed, 30 Nov 2016 17:58:35 +0100 Subject: [PATCH] AM Modulator: corrected modulation --- plugins/channeltx/modam/ammod.cpp | 23 +++++++++++++---------- plugins/channeltx/modam/ammod.h | 1 + 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/plugins/channeltx/modam/ammod.cpp b/plugins/channeltx/modam/ammod.cpp index ea97abbd8..ceed7b315 100644 --- a/plugins/channeltx/modam/ammod.cpp +++ b/plugins/channeltx/modam/ammod.cpp @@ -82,30 +82,23 @@ void AMMod::configure(MessageQueue* messageQueue, void AMMod::pull(Sample& sample) { Complex ci; - Real t; m_settingsMutex.lock(); if (m_interpolatorDistance > 1.0f) // decimate { - pullAF(t); - m_modSample.real(((t+1.0f) * m_running.m_modFactor * 16384.0f)); // modulate and scale zero frequency carrier - m_modSample.imag(0.0f); + modulateSample(); while (!m_interpolator.decimate(&m_interpolatorDistanceRemain, m_modSample, &ci)) { - pullAF(t); - m_modSample.real(((t+1.0f) * m_running.m_modFactor * 16384.0f)); // modulate and scale zero frequency carrier - m_modSample.imag(0.0f); + modulateSample(); } } else { if (m_interpolator.interpolate(&m_interpolatorDistanceRemain, m_modSample, &ci)) { - pullAF(t); - m_modSample.real(((t+1.0f) * m_running.m_modFactor * 16384.0f)); // modulate and scale zero frequency carrier - m_modSample.imag(0.0f); + modulateSample(); } } @@ -124,6 +117,16 @@ void AMMod::pull(Sample& sample) sample.m_imag = (FixReal) ci.imag(); } +void AMMod::modulateSample() +{ + Real t; + + pullAF(t); + + m_modSample.real((t*m_running.m_modFactor + 1.0f) * 16384.0f); // modulate and scale zero frequency carrier + m_modSample.imag(0.0f); +} + void AMMod::pullAF(Real& sample) { int16_t audioSample[2]; diff --git a/plugins/channeltx/modam/ammod.h b/plugins/channeltx/modam/ammod.h index 0c3b639be..d5937e573 100644 --- a/plugins/channeltx/modam/ammod.h +++ b/plugins/channeltx/modam/ammod.h @@ -285,6 +285,7 @@ private: void apply(); void pullAF(Real& sample); + void modulateSample(); void openFileStream(); void seekFileStream(int seekPercentage); };