Hi guys,
Attached is a modified version of engineflanger.cpp from Enry. The
relevant changed lines are:
potmeterDelay = new ControlPotmeter(ConfigKey(group, "lfoDelay"),
50., 10000.);
potmeterLFOperiod = new ControlPotmeter(ConfigKey(group,
"lfoPeriod"), 50000., 2000000.);
This changes the sound of the flanger. I tested it out over a week ago
and I wasn't convinced this sounds any better than the current
flanger. If anyone feels like trying it out and giving me a second
opinion, I'd appreciate it.
I think the flanger needs some work...
Albert
Begin forwarded message:
From: [EMAIL PROTECTED]
Date: February 16, 2008 11:41:28 AM GMT-05:00
To: [EMAIL PROTECTED]
Subject: Flanger effect modifiedvalues
Hello.
engineflanger.cpp: I have simply modified period value at line 40. I
also changed delay at line 39, but i'm not very sure about the
difference by changing delay. Also check if computing charge
increases.
enri
/
***************************************************************************
engineflanger.cpp - description
-------------------
copyright : (C) 2002 by Tue and Ken Haste Andersen
email :
***************************************************************************/
/
***************************************************************************
* *
* This program is free software; you can redistribute it and/or
modify *
* it under the terms of the GNU General Public License as
published by *
* the Free Software Foundation; either version 2 of the License,
or *
* (at your option) any later
version. *
* *
***************************************************************************/
#include "controlpushbutton.h"
#include "controlpotmeter.h"
#include "engineflanger.h"
/*----------------------------------------------------------------
A flanger effect.
The flanger is controlled by the following variables:
average_delay_length - The average length of the delay, which is
modulated by the LFO.
LFOperiod - the period of LFO given in samples.
LFOamplitude - the amplitude of the modulation of the delay length.
depth - the depth of the flanger, controlled by a ControlPotmeter.
----------------------------------------------------------------*/
EngineFlanger::EngineFlanger(const char * group)
{
// Init. buffers:
delay_buffer = new CSAMPLE[max_delay+1];
for (int i=0; i<max_delay+1; ++i)
delay_buffer[i] = 0.;
// Init. potmeters
potmeterDepth = new ControlPotmeter(ConfigKey(group, "lfoDepth"),
0., 1.);
potmeterDelay = new ControlPotmeter(ConfigKey(group, "lfoDelay"),
50., 10000.);
potmeterLFOperiod = new ControlPotmeter(ConfigKey(group,
"lfoPeriod"), 50000., 2000000.);
// Init. channel selects:
pushbuttonFlangerCh1 = new
ControlPushButton(ConfigKey("[Channel1]", "flanger"), true);
pushbuttonFlangerCh2 = new
ControlPushButton(ConfigKey("[Channel2]", "flanger"), true);
// Fixed values of controls:
LFOamplitude = 240;
average_delay_length = 250;
// Set initial values for vars
delay_pos=0;
time = 0;
}
EngineFlanger::~EngineFlanger()
{
delete potmeterDepth;
delete potmeterDelay;
delete potmeterLFOperiod;
delete pushbuttonFlangerCh1;
delete pushbuttonFlangerCh2;
delete [] delay_buffer;
}
ControlPushButton * EngineFlanger::getButtonCh1()
{
return pushbuttonFlangerCh1;
}
ControlPushButton * EngineFlanger::getButtonCh2()
{
return pushbuttonFlangerCh2;
}
void EngineFlanger::process(const CSAMPLE * pIn, const CSAMPLE *
pOut, const int iBufferSize)
{
CSAMPLE * pOutput = (CSAMPLE *)pOut;
CSAMPLE delayed_sample,prev,next;
FLOAT_TYPE frac;
for (int i=0; i<iBufferSize; ++i)
{
// put sample into delay buffer:
delay_buffer[delay_pos] = pIn[i];
delay_pos++;
if (delay_pos >= max_delay)
delay_pos=0;
// Update the LFO to find the current delay:
time++;
if (time==potmeterLFOperiod->get()) time=0;
delay = average_delay_length + LFOamplitude *sin( two_pi *
((FLOAT_TYPE) time)/((FLOAT_TYPE) potmeterLFOperiod->get()) );
// Make a linear interpolation to find the delayed sample:
prev = delay_buffer[(delay_pos-(int)delay+max_delay-1) %
max_delay];
next = delay_buffer[(delay_pos-(int)delay+max_delay) %
max_delay];
frac = delay - floor(delay);
delayed_sample = prev + frac*(next-prev);
// Take the sample from the delay buffer and mix it with the
source buffer:
pOutput[i] = pIn[i] + potmeterDepth->get()*delayed_sample;
}
}
-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
Mixxx-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/mixxx-devel