More fixes, stuff
This commit is contained in:
@@ -138,6 +138,8 @@ private:
|
||||
f_cnt_t m_rFrames;
|
||||
sample_t * m_pahdEnv;
|
||||
sample_t * m_rEnv;
|
||||
f_cnt_t m_pahdBufSize;
|
||||
f_cnt_t m_rBufSize;
|
||||
|
||||
|
||||
FloatModel m_lfoPredelayModel;
|
||||
|
||||
@@ -100,8 +100,12 @@ EnvelopeAndLfoParameters::EnvelopeAndLfoParameters(
|
||||
m_releaseModel( 0.1, 0.0, 2.0, 0.001, this, tr( "Release" ) ),
|
||||
m_amountModel( 0.0, -1.0, 1.0, 0.005, this, tr( "Modulation" ) ),
|
||||
m_valueForZeroAmount( _value_for_zero_amount ),
|
||||
m_pahdFrames( 0 ),
|
||||
m_rFrames( 0 ),
|
||||
m_pahdEnv( NULL ),
|
||||
m_rEnv( NULL ),
|
||||
m_pahdBufSize( 0 ),
|
||||
m_rBufSize( 0 ),
|
||||
m_lfoPredelayModel( 0.0, 0.0, 1.0, 0.001, this, tr( "LFO Predelay" ) ),
|
||||
m_lfoAttackModel( 0.0, 0.0, 1.0, 0.001, this, tr( "LFO Attack" ) ),
|
||||
m_lfoSpeedModel( 0.1, 0.001, 1.0, 0.0001,
|
||||
@@ -434,15 +438,24 @@ void EnvelopeAndLfoParameters::updateSampleVars()
|
||||
|
||||
if( static_cast<int>( floorf( m_amount * 1000.0f ) ) == 0 )
|
||||
{
|
||||
//m_pahdFrames = 0;
|
||||
m_rFrames = 0;
|
||||
}
|
||||
|
||||
delete[] m_pahdEnv;
|
||||
delete[] m_rEnv;
|
||||
|
||||
m_pahdEnv = new sample_t[m_pahdFrames];
|
||||
m_rEnv = new sample_t[m_rFrames];
|
||||
// if the buffers are too small, make bigger ones - so we only alloc new memory when necessary
|
||||
if( m_pahdBufSize < m_pahdFrames )
|
||||
{
|
||||
sample_t * tmp = m_pahdEnv;
|
||||
m_pahdEnv = new sample_t[m_pahdFrames];
|
||||
delete tmp;
|
||||
m_pahdBufSize = m_pahdFrames;
|
||||
}
|
||||
if( m_rBufSize < m_rFrames )
|
||||
{
|
||||
sample_t * tmp = m_rEnv;
|
||||
m_rEnv = new sample_t[m_rFrames];
|
||||
delete tmp;
|
||||
m_rBufSize = m_rFrames;
|
||||
}
|
||||
|
||||
const float aa = m_amountAdd;
|
||||
for( f_cnt_t i = 0; i < predelay_frames; ++i )
|
||||
|
||||
@@ -93,7 +93,7 @@ InstrumentSoundShaping::InstrumentSoundShaping(
|
||||
m_filterModel.addItem( tr( "RC LowPass 24dB" ), new PixmapLoader( "filter_lp" ) );
|
||||
m_filterModel.addItem( tr( "RC BandPass 24dB" ), new PixmapLoader( "filter_bp" ) );
|
||||
m_filterModel.addItem( tr( "RC HighPass 24dB" ), new PixmapLoader( "filter_hp" ) );
|
||||
m_filterModel.addItem( tr( "Vocal Formant Filter" ), new PixmapLoader( "filter_hp" ) );
|
||||
m_filterModel.addItem( tr( "Vocal Formant Filter" ), new PixmapLoader( "filter_hp" ) );
|
||||
}
|
||||
|
||||
|
||||
@@ -146,6 +146,9 @@ void InstrumentSoundShaping::processAudioBuffer( sampleFrame* buffer,
|
||||
|
||||
if( m_filterEnabledModel.value() )
|
||||
{
|
||||
float cutBuffer [frames];
|
||||
float resBuffer [frames];
|
||||
|
||||
int old_filter_cut = 0;
|
||||
int old_filter_res = 0;
|
||||
|
||||
@@ -155,27 +158,13 @@ void InstrumentSoundShaping::processAudioBuffer( sampleFrame* buffer,
|
||||
}
|
||||
n->m_filter->setFilterType( m_filterModel.value() );
|
||||
|
||||
#ifdef __GNUC__
|
||||
float cut_buf[frames];
|
||||
float res_buf[frames];
|
||||
#else
|
||||
float * cut_buf = NULL;
|
||||
float * res_buf = NULL;
|
||||
#endif
|
||||
|
||||
if( m_envLfoParameters[Cut]->isUsed() )
|
||||
{
|
||||
#ifndef __GNUC__
|
||||
cut_buf = new float[frames];
|
||||
#endif
|
||||
m_envLfoParameters[Cut]->fillLevel( cut_buf, envTotalFrames, envReleaseBegin, frames );
|
||||
m_envLfoParameters[Cut]->fillLevel( cutBuffer, envTotalFrames, envReleaseBegin, frames );
|
||||
}
|
||||
if( m_envLfoParameters[Resonance]->isUsed() )
|
||||
{
|
||||
#ifndef __GNUC__
|
||||
res_buf = new float[frames];
|
||||
#endif
|
||||
m_envLfoParameters[Resonance]->fillLevel( res_buf, envTotalFrames, envReleaseBegin, frames );
|
||||
m_envLfoParameters[Resonance]->fillLevel( resBuffer, envTotalFrames, envReleaseBegin, frames );
|
||||
}
|
||||
|
||||
const float fcv = m_filterCutModel.value();
|
||||
@@ -186,10 +175,10 @@ void InstrumentSoundShaping::processAudioBuffer( sampleFrame* buffer,
|
||||
{
|
||||
for( fpp_t frame = 0; frame < frames; ++frame )
|
||||
{
|
||||
const float new_cut_val = EnvelopeAndLfoParameters::expKnobVal( cut_buf[frame] ) *
|
||||
const float new_cut_val = EnvelopeAndLfoParameters::expKnobVal( cutBuffer[frame] ) *
|
||||
CUT_FREQ_MULTIPLIER + fcv;
|
||||
|
||||
const float new_res_val = frv + RES_MULTIPLIER * res_buf[frame];
|
||||
const float new_res_val = frv + RES_MULTIPLIER * resBuffer[frame];
|
||||
|
||||
if( static_cast<int>( new_cut_val ) != old_filter_cut ||
|
||||
static_cast<int>( new_res_val*RES_PRECISION ) != old_filter_res )
|
||||
@@ -207,7 +196,7 @@ void InstrumentSoundShaping::processAudioBuffer( sampleFrame* buffer,
|
||||
{
|
||||
for( fpp_t frame = 0; frame < frames; ++frame )
|
||||
{
|
||||
float new_cut_val = EnvelopeAndLfoParameters::expKnobVal( cut_buf[frame] ) *
|
||||
float new_cut_val = EnvelopeAndLfoParameters::expKnobVal( cutBuffer[frame] ) *
|
||||
CUT_FREQ_MULTIPLIER + fcv;
|
||||
|
||||
if( static_cast<int>( new_cut_val ) != old_filter_cut )
|
||||
@@ -224,7 +213,7 @@ void InstrumentSoundShaping::processAudioBuffer( sampleFrame* buffer,
|
||||
{
|
||||
for( fpp_t frame = 0; frame < frames; ++frame )
|
||||
{
|
||||
float new_res_val = frv + RES_MULTIPLIER * res_buf[frame];
|
||||
float new_res_val = frv + RES_MULTIPLIER * resBuffer[frame];
|
||||
|
||||
if( static_cast<int>( new_res_val*RES_PRECISION ) != old_filter_res )
|
||||
{
|
||||
@@ -246,32 +235,20 @@ void InstrumentSoundShaping::processAudioBuffer( sampleFrame* buffer,
|
||||
buffer[frame][1] = n->m_filter->update( buffer[frame][1], 1 );
|
||||
}
|
||||
}
|
||||
|
||||
#ifndef __GNUC__
|
||||
delete[] cut_buf;
|
||||
delete[] res_buf;
|
||||
#endif
|
||||
}
|
||||
|
||||
if( m_envLfoParameters[Volume]->isUsed() )
|
||||
{
|
||||
#ifdef __GNUC__
|
||||
float vol_buf[frames];
|
||||
#else
|
||||
float * vol_buf = new float[frames];
|
||||
#endif
|
||||
m_envLfoParameters[Volume]->fillLevel( vol_buf, envTotalFrames, envReleaseBegin, frames );
|
||||
float volBuffer [frames];
|
||||
m_envLfoParameters[Volume]->fillLevel( volBuffer, envTotalFrames, envReleaseBegin, frames );
|
||||
|
||||
for( fpp_t frame = 0; frame < frames; ++frame )
|
||||
{
|
||||
float vol_level = vol_buf[frame];
|
||||
float vol_level = volBuffer[frame];
|
||||
vol_level = vol_level * vol_level;
|
||||
buffer[frame][0] = vol_level * buffer[frame][0];
|
||||
buffer[frame][1] = vol_level * buffer[frame][1];
|
||||
}
|
||||
#ifndef __GNUC__
|
||||
delete[] vol_buf;
|
||||
#endif
|
||||
}
|
||||
|
||||
/* else if( m_envLfoParameters[Volume]->isUsed() == false && m_envLfoParameters[PANNING]->isUsed() )
|
||||
|
||||
@@ -275,9 +275,9 @@ void InstrumentTrack::processInEvent( const MidiEvent& event, const MidiTime& ti
|
||||
if( event.velocity() > 0 )
|
||||
{
|
||||
NotePlayHandle* nph;
|
||||
m_notesMutex.lock();
|
||||
if( m_notes[event.key()] == NULL )
|
||||
{
|
||||
m_notesMutex.lock();
|
||||
nph = new NotePlayHandle( this, offset,
|
||||
typeInfo<f_cnt_t>::max() / 2,
|
||||
note( MidiTime(), MidiTime(), event.key(), event.volume( midiPort()->baseVelocity() ) ),
|
||||
@@ -287,24 +287,23 @@ void InstrumentTrack::processInEvent( const MidiEvent& event, const MidiTime& ti
|
||||
if( ! engine::mixer()->addPlayHandle( nph ) )
|
||||
{
|
||||
m_notes[event.key()] = NULL;
|
||||
delete nph;
|
||||
}
|
||||
m_notesMutex.unlock();
|
||||
}
|
||||
m_notesMutex.unlock();
|
||||
eventHandled = true;
|
||||
break;
|
||||
}
|
||||
|
||||
case MidiNoteOff:
|
||||
m_notesMutex.lock();
|
||||
if( m_notes[event.key()] != NULL )
|
||||
{
|
||||
m_notesMutex.lock();
|
||||
// do actual note off and remove internal reference to NotePlayHandle (which itself will
|
||||
// be deleted later automatically)
|
||||
m_notes[event.key()]->noteOff( offset );
|
||||
m_notes[event.key()] = NULL;
|
||||
m_notesMutex.unlock();
|
||||
}
|
||||
m_notesMutex.unlock();
|
||||
eventHandled = true;
|
||||
break;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user