From e11ca5bb9f63bac2c1788918e5ba83b685aa2449 Mon Sep 17 00:00:00 2001 From: Danny McRae Date: Thu, 6 Apr 2006 14:27:24 +0000 Subject: [PATCH] Fixed problem with adding strings to vibed plugin while playing Modified Files: plugins/vibed/impulse_editor.cpp plugins/vibed/impulse_editor.h plugins/vibed/string_container.cpp plugins/vibed/string_container.h plugins/vibed/vibed.cpp plugins/vibed/vibed.h git-svn-id: https://lmms.svn.sf.net/svnroot/lmms/trunk/lmms@120 0778d3d1-df1d-0410-868b-ea421aaaa00d --- ChangeLog | 11 +++++++++++ plugins/vibed/impulse_editor.cpp | 4 ++-- plugins/vibed/impulse_editor.h | 1 + plugins/vibed/string_container.cpp | 11 +++++++++-- plugins/vibed/string_container.h | 12 ++++++++++-- plugins/vibed/vibed.cpp | 5 +++-- plugins/vibed/vibed.h | 1 - 7 files changed, 36 insertions(+), 9 deletions(-) diff --git a/ChangeLog b/ChangeLog index 8d7396581..e19fd00b2 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,14 @@ +2006-04-05 Danny McRae + + * plugins/vibed/impulse_editor.cpp: + - corrected mismatch sin/saw mismatch in initialization + + * plugins/vibed/string_container.h: + * plugins/vibed/string_container.cpp: + * plugins/vibed/vibed.h: + * plugins/vibed/vibed.cpp: + - added string id tracking to allow adding strings while playing + 2006-04-05 Tobias Doerffel * include/plugin_browser.h: diff --git a/plugins/vibed/impulse_editor.cpp b/plugins/vibed/impulse_editor.cpp index 7e0ade83f..328e19d41 100644 --- a/plugins/vibed/impulse_editor.cpp +++ b/plugins/vibed/impulse_editor.cpp @@ -188,7 +188,7 @@ impulseEditor::impulseEditor( QWidget * _parent, int _x, int _y, m_graph->setSamplePointer( m_sampleShape, m_sampleLength ); m_lastBtn = m_sinWaveBtn; - emit( sawWaveClicked() ); + emit( sinWaveClicked() ); move( _x, _y ); @@ -298,7 +298,7 @@ void impulseEditor::noiseWaveClicked( void ) void impulseEditor::usrWaveClicked( void ) { - m_lastBtn->setChecked( FALSE); + m_lastBtn->setChecked( FALSE ); m_lastBtn = m_usrWaveBtn; m_lastBtn->setChecked( TRUE ); // zero sample_shape diff --git a/plugins/vibed/impulse_editor.h b/plugins/vibed/impulse_editor.h index a57de143a..ff9a5820f 100644 --- a/plugins/vibed/impulse_editor.h +++ b/plugins/vibed/impulse_editor.h @@ -57,6 +57,7 @@ public: inline float * getValues() { return( m_sampleShape ); }; inline bool isOn() { return( m_state->isChecked() ); }; + void FASTCALL setValues( float * _shape ); public slots: diff --git a/plugins/vibed/string_container.cpp b/plugins/vibed/string_container.cpp index e63705dcc..bd6e0f045 100644 --- a/plugins/vibed/string_container.cpp +++ b/plugins/vibed/string_container.cpp @@ -27,11 +27,16 @@ stringContainer::stringContainer(const float _pitch, const sample_rate_t _sample_rate, - const Uint32 _buffer_length ) : + const Uint32 _buffer_length, + const Uint8 _strings ) : m_pitch( _pitch ), m_sampleRate( _sample_rate ), m_bufferLength( _buffer_length ) { + for( Uint8 i = 0; i < _strings; i++ ) + { + m_exists.append( FALSE ); + } } @@ -45,7 +50,8 @@ void stringContainer::addString(Uint8 _harm, const float _string_loss, const float _detune, const Uint8 _oversample, - const bool _state ) + const bool _state, + const Uint8 _id ) { float harm; switch( _harm ) @@ -92,4 +98,5 @@ void stringContainer::addString(Uint8 _harm, _string_loss, _detune, _state ) ); + m_exists[_id] = TRUE; } diff --git a/plugins/vibed/string_container.h b/plugins/vibed/string_container.h index f47640022..9bdc5dbe5 100644 --- a/plugins/vibed/string_container.h +++ b/plugins/vibed/string_container.h @@ -39,7 +39,8 @@ class stringContainer public: stringContainer(const float _pitch, const sample_rate_t _sample_rate, - const Uint32 _buffer_length ); + const Uint32 _buffer_length, + const Uint8 _strings = 9 ); void addString( Uint8 _harm, const float _pick, @@ -49,7 +50,13 @@ public: const float _string_loss, const float _detune, const Uint8 _oversample, - const bool _state ); + const bool _state, + const Uint8 _id ); + + inline bool exists( Uint8 _id ) + { + return( m_exists[_id] ); + } inline ~stringContainer() { @@ -70,6 +77,7 @@ private: const float m_pitch; const sample_rate_t m_sampleRate; const Uint32 m_bufferLength; + vvector m_exists; } ; #endif diff --git a/plugins/vibed/vibed.cpp b/plugins/vibed/vibed.cpp index bef8a1714..c44c4111e 100644 --- a/plugins/vibed/vibed.cpp +++ b/plugins/vibed/vibed.cpp @@ -589,7 +589,8 @@ void vibed::playNote( notePlayHandle * _n ) m_detuneKnobs[i]->value(), static_cast( m_lengthKnobs[i]->value() ), - m_impulses[i]->isChecked() ); + m_impulses[i]->isChecked(), + i ); } } } @@ -612,7 +613,7 @@ void vibed::playNote( notePlayHandle * _n ) s = 0; for( Uint8 string = 0; string < 9; string ++ ) { - if( m_editors[string]->isOn() ) + if( ps->exists( string ) ) { vol = m_volumeKnobs[string]->value(); pan = ( diff --git a/plugins/vibed/vibed.h b/plugins/vibed/vibed.h index 03c6dcee0..a01ab6160 100644 --- a/plugins/vibed/vibed.h +++ b/plugins/vibed/vibed.h @@ -93,7 +93,6 @@ private: sampleBuffer * m_sampleBuffer; int m_sampleLength; - } ;