Monstro - More fixes..

This commit is contained in:
Vesa
2014-03-30 01:43:20 +02:00
parent 252e0609fa
commit 9f594268c8

View File

@@ -96,21 +96,21 @@ MonstroSynth::~MonstroSynth()
void MonstroSynth::renderOutput( fpp_t _frames, sampleFrame * _buf )
{
// macros for modulating with env/lfos
#define modulatefreq( car, mod ) \
if( mod##_e1 != 0.0 ) car = qBound( MIN_FREQ, car * static_cast<float>( fastPow( 10, m_env1_buf[f] * mod##_e1 ) ), MAX_FREQ ); \
if( mod##_e2 != 0.0 ) car = qBound( MIN_FREQ, car * static_cast<float>( fastPow( 10, m_env2_buf[f] * mod##_e2 ) ), MAX_FREQ ); \
if( mod##_l1 != 0.0 ) car = qBound( MIN_FREQ, car * static_cast<float>( fastPow( 10, m_lfo1_buf[f] * mod##_l1 ) ), MAX_FREQ ); \
if( mod##_l2 != 0.0 ) car = qBound( MIN_FREQ, car * static_cast<float>( fastPow( 10, m_lfo2_buf[f] * mod##_l2 ) ), MAX_FREQ );
#define modulatefreq( car, mod ) \
if( mod##_e1 != 0.0 ) car = qBound( MIN_FREQ, car * static_cast<float>( fastPow( 10.0, m_env1_buf[f] * mod##_e1 ) ), MAX_FREQ ); \
if( mod##_e2 != 0.0 ) car = qBound( MIN_FREQ, car * static_cast<float>( fastPow( 10.0, m_env2_buf[f] * mod##_e2 ) ), MAX_FREQ ); \
if( mod##_l1 != 0.0 ) car = qBound( MIN_FREQ, car * static_cast<float>( fastPow( 5.0, m_lfo1_buf[f] * mod##_l1 ) ), MAX_FREQ ); \
if( mod##_l2 != 0.0 ) car = qBound( MIN_FREQ, car * static_cast<float>( fastPow( 5.0, m_lfo2_buf[f] * mod##_l2 ) ), MAX_FREQ );
#define modulateabs( car, mod ) \
if( mod##_e1 != 0.0 ) car = qBound( 0.0f, car + mod##_e1 / 2 * m_env1_buf[f], 1.0f ); \
if( mod##_e2 != 0.0 ) car = qBound( 0.0f, car + mod##_e2 / 2 * m_env2_buf[f], 1.0f ); \
if( mod##_e1 != 0.0 ) car = qBound( 0.0f, car + mod##_e1 * m_env1_buf[f], 1.0f ); \
if( mod##_e2 != 0.0 ) car = qBound( 0.0f, car + mod##_e2 * m_env2_buf[f], 1.0f ); \
if( mod##_l1 != 0.0 ) car = qBound( 0.0f, car + mod##_l1 / 2 * m_lfo1_buf[f], 1.0f ); \
if( mod##_l2 != 0.0 ) car = qBound( 0.0f, car + mod##_l2 / 2 * m_lfo2_buf[f], 1.0f );
#define modulatephs( car, mod ) \
if( mod##_e1 != 0.0 ) car = fraction( car + mod##_e1 / 2 * m_env1_buf[f] ); \
if( mod##_e2 != 0.0 ) car = fraction( car + mod##_e2 / 2 * m_env2_buf[f] ); \
if( mod##_e1 != 0.0 ) car = fraction( car + mod##_e1 * m_env1_buf[f] ); \
if( mod##_e2 != 0.0 ) car = fraction( car + mod##_e2 * m_env2_buf[f] ); \
if( mod##_l1 != 0.0 ) car = fraction( car + mod##_l1 / 2 * m_lfo1_buf[f] ); \
if( mod##_l2 != 0.0 ) car = fraction( car + mod##_l2 / 2 * m_lfo2_buf[f] );
@@ -176,7 +176,7 @@ void MonstroSynth::renderOutput( fpp_t _frames, sampleFrame * _buf )
const float o2rfb = ( m_parent->m_osc2r_freq * m_nph->frequency() );
const float o2f_e1 = ( m_parent->m_pit2env1.value() );
const float o2f_e2 = ( m_parent->m_pit2env2.value() );
const float o2f_l1 = ( m_parent->m_pit2lfo2.value() );
const float o2f_l1 = ( m_parent->m_pit2lfo1.value() );
const float o2f_l2 = ( m_parent->m_pit2lfo2.value() );
// get volumes
@@ -229,7 +229,6 @@ void MonstroSynth::renderOutput( fpp_t _frames, sampleFrame * _buf )
const int omod = m_parent->m_o23Mod.value();
// frequency helpers
///////////////////////////
// //
@@ -333,8 +332,8 @@ void MonstroSynth::renderOutput( fpp_t _frames, sampleFrame * _buf )
// o2 modulation?
if( omod == MOD_FM )
{
o3l_f = qBound( MIN_FREQ, o3l_f * static_cast<float>( fastPow( 4, O2L ) ), MAX_FREQ );
o3r_f = qBound( MIN_FREQ, o3r_f * static_cast<float>( fastPow( 4, O2R ) ), MAX_FREQ );
o3l_f = qBound( MIN_FREQ, o3l_f * powf( 5, O2L ), MAX_FREQ );
o3r_f = qBound( MIN_FREQ, o3r_f * powf( 5, O2R ), MAX_FREQ );
}
// calc and modulate phase
@@ -1151,17 +1150,17 @@ void MonstroInstrument::updateVolumes()
void MonstroInstrument::updateFreq()
{
m_osc1l_freq = powf( 2.0d, m_osc1Crs.value() / 12.0d ) *
powf( 2.0d, m_osc1Ftl.value() / 1200.0d );
m_osc1r_freq = powf( 2.0d, m_osc1Crs.value() / 12.0d ) *
powf( 2.0d, m_osc1Ftr.value() / 1200.0d );
m_osc1l_freq = powf( 2.0f, m_osc1Crs.value() / 12.0f ) *
powf( 2.0f, m_osc1Ftl.value() / 1200.0f );
m_osc1r_freq = powf( 2.0f, m_osc1Crs.value() / 12.0f ) *
powf( 2.0f, m_osc1Ftr.value() / 1200.0f );
m_osc2l_freq = powf( 2.0d, m_osc2Crs.value() / 12.0d ) *
powf( 2.0d, m_osc2Ftl.value() / 1200.0d );
m_osc2r_freq = powf( 2.0d, m_osc2Crs.value() / 12.0d ) *
powf( 2.0d, m_osc2Ftr.value() / 1200.0d );
m_osc2l_freq = powf( 2.0f, m_osc2Crs.value() / 12.0f ) *
powf( 2.0f, m_osc2Ftl.value() / 1200.0f );
m_osc2r_freq = powf( 2.0f, m_osc2Crs.value() / 12.0f ) *
powf( 2.0f, m_osc2Ftr.value() / 1200.0f );
m_osc3_freq = powf( 2.0d, m_osc3Crs.value() / 12.0d );
m_osc3_freq = powf( 2.0f, m_osc3Crs.value() / 12.0f );
}
@@ -1422,7 +1421,7 @@ QWidget * MonstroView::setupOperatorsView( QWidget * _parent )
makeknob( m_osc1CrsKnob, KNOBCOL3, O1ROW, "Coarse detune", " seminotes", "osc1Knob" )
makeknob( m_osc1FtlKnob, KNOBCOL4, O1ROW, "Finetune left", " cents", "osc1Knob" )
makeknob( m_osc1FtrKnob, KNOBCOL5, O1ROW, "Finetune right", " cents", "osc1Knob" )
makeknob( m_osc1SpoKnob, KNOBCOL6, O1ROW, "Stereo phase offset", "°", "osc1Knob" )
makeknob( m_osc1SpoKnob, KNOBCOL6, O1ROW, "Stereo phase offset", " deg", "osc1Knob" )
makeknob( m_osc1PwKnob, KNOBCOL7, O1ROW, "Pulse width", "%", "osc1Knob" )
m_osc1VolKnob -> setVolumeKnob( true );
@@ -1432,7 +1431,7 @@ QWidget * MonstroView::setupOperatorsView( QWidget * _parent )
makeknob( m_osc2CrsKnob, KNOBCOL3, O2ROW, "Coarse detune", " seminotes", "osc2Knob" )
makeknob( m_osc2FtlKnob, KNOBCOL4, O2ROW, "Finetune left", " cents", "osc2Knob" )
makeknob( m_osc2FtrKnob, KNOBCOL5, O2ROW, "Finetune right", " cents", "osc2Knob" )
makeknob( m_osc2SpoKnob, KNOBCOL6, O2ROW, "Stereo phase offset", "°", "osc2Knob" )
makeknob( m_osc2SpoKnob, KNOBCOL6, O2ROW, "Stereo phase offset", " deg", "osc2Knob" )
m_osc2VolKnob -> setVolumeKnob( true );
@@ -1443,7 +1442,7 @@ QWidget * MonstroView::setupOperatorsView( QWidget * _parent )
makeknob( m_osc3VolKnob, KNOBCOL1, O3ROW, "Volume", "%", "osc3Knob" )
makeknob( m_osc3PanKnob, KNOBCOL2, O3ROW, "Panning", "", "osc3Knob" )
makeknob( m_osc3CrsKnob, KNOBCOL3, O3ROW, "Coarse detune", " seminotes", "osc3Knob" )
makeknob( m_osc3SpoKnob, KNOBCOL4, O3ROW, "Stereo phase offset", "°", "osc3Knob" )
makeknob( m_osc3SpoKnob, KNOBCOL4, O3ROW, "Stereo phase offset", " deg", "osc3Knob" )
makeknob( m_osc3SubKnob, KNOBCOL5, O3ROW, "Sub-osc mix", "", "osc3Knob" )
m_osc3Wave1Box = new comboBox( view );
@@ -1460,7 +1459,7 @@ QWidget * MonstroView::setupOperatorsView( QWidget * _parent )
maketsknob( m_lfo1AttKnob, LFOCOL1, LFOROW, "Attack", " ms", "lfoKnob" )
maketsknob( m_lfo1RateKnob, LFOCOL2, LFOROW, "Rate", " ms", "lfoKnob" )
makeknob( m_lfo1PhsKnob, LFOCOL3, LFOROW, "Phase", "°", "lfoKnob" )
makeknob( m_lfo1PhsKnob, LFOCOL3, LFOROW, "Phase", " deg", "lfoKnob" )
m_lfo2WaveBox = new comboBox( view );
m_lfo2WaveBox -> setGeometry( 127, LFOROW + 7, 42, 22 );
@@ -1468,7 +1467,7 @@ QWidget * MonstroView::setupOperatorsView( QWidget * _parent )
maketsknob( m_lfo2AttKnob, LFOCOL4, LFOROW, "Attack", " ms", "lfoKnob" )
maketsknob( m_lfo2RateKnob, LFOCOL5, LFOROW, "Rate", " ms", "lfoKnob" )
makeknob( m_lfo2PhsKnob, LFOCOL6, LFOROW, "Phase", "°", "lfoKnob" )
makeknob( m_lfo2PhsKnob, LFOCOL6, LFOROW, "Phase", " deg", "lfoKnob" )
maketsknob( m_env1PreKnob, KNOBCOL1, E1ROW, "Pre-delay", " ms", "envKnob" )
maketsknob( m_env1AttKnob, KNOBCOL2, E1ROW, "Attack", " ms", "envKnob" )