From 9b7738dc60915d5b745a7a2912b84606c1ef0aa7 Mon Sep 17 00:00:00 2001 From: dave Date: Tue, 25 Nov 2014 22:38:49 +0000 Subject: [PATCH 1/4] changed LFO ammount to absolute value. --- plugins/delay/delaycontrols.cpp | 2 +- plugins/delay/delaycontrols.h | 2 +- plugins/delay/delaycontrolsdialog.cpp | 4 ++-- plugins/delay/delayeffect.cpp | 4 ++-- plugins/delay/lfo.cpp | 8 +------- plugins/delay/lfo.h | 13 ------------- 6 files changed, 7 insertions(+), 26 deletions(-) diff --git a/plugins/delay/delaycontrols.cpp b/plugins/delay/delaycontrols.cpp index fb86834c7..cc0aadbb5 100644 --- a/plugins/delay/delaycontrols.cpp +++ b/plugins/delay/delaycontrols.cpp @@ -35,7 +35,7 @@ DelayControls::DelayControls( DelayEffect* effect ): m_delayTimeModel( 2.0, 0.01, 20.0, 0.0001, 20000.0, this, tr( "Delay Samples" )) , m_feedbackModel(0.0f,0.0f,1.0f,0.01f,this,tr( "Feedback" ) ), m_lfoTimeModel(2.0, 0.01, 20.0, 0.0001, 20000.0, this, tr( "Lfo Frequency" ) ), - m_lfoAmountModel(0.0f,0.0f,0.1f,0.0001f, this, tr ( "Lfo Amount" ) ) + m_lfoAmountModel(0.0, 0.0, 2.0, 0.0001, 2000.0, this, tr ( "Lfo Amount" ) ) { connect( engine::mixer(), SIGNAL( sampleRateChanged() ), this, SLOT( changeSampleRate() ) ); } diff --git a/plugins/delay/delaycontrols.h b/plugins/delay/delaycontrols.h index fe7b3c3e9..76dacc811 100644 --- a/plugins/delay/delaycontrols.h +++ b/plugins/delay/delaycontrols.h @@ -63,7 +63,7 @@ private: TempoSyncKnobModel m_delayTimeModel; FloatModel m_feedbackModel; TempoSyncKnobModel m_lfoTimeModel; - FloatModel m_lfoAmountModel; + TempoSyncKnobModel m_lfoAmountModel; friend class DelayControlsDialog; friend class DelayEffect; diff --git a/plugins/delay/delaycontrolsdialog.cpp b/plugins/delay/delaycontrolsdialog.cpp index 1f5746d02..badc9f84f 100644 --- a/plugins/delay/delaycontrolsdialog.cpp +++ b/plugins/delay/delaycontrolsdialog.cpp @@ -60,9 +60,9 @@ DelayControlsDialog::DelayControlsDialog( DelayControls *controls ) : lfoFreqKnob->setLabel( tr( "Rate" ) ); lfoFreqKnob->setHintText( tr ( "Lfo Seconds:" ) + " ", "" ); - knob * lfoAmtKnob = new knob( knobBright_26, this ); + TempoSyncKnob * lfoAmtKnob = new TempoSyncKnob( knobBright_26, this ); lfoAmtKnob->move( 150,10 ); - lfoAmtKnob->setVolumeKnob( true ); + lfoAmtKnob->setVolumeKnob( false ); lfoAmtKnob->setModel( &controls->m_lfoAmountModel ); lfoAmtKnob->setLabel( tr( "Lfo" ) ); lfoAmtKnob->setHintText( tr ( "Lfo Amt:" ) + " ", "" ); diff --git a/plugins/delay/delayeffect.cpp b/plugins/delay/delayeffect.cpp index 939cae7e2..bb1cad259 100644 --- a/plugins/delay/delayeffect.cpp +++ b/plugins/delay/delayeffect.cpp @@ -83,7 +83,7 @@ bool DelayEffect::processAudioBuffer( sampleFrame* buf, const fpp_t frames ) const float d = dryLevel(); const float w = wetLevel(); const float length = m_delayControls.m_delayTimeModel.value() * engine::mixer()->processingSampleRate(); - m_lfo->setAmplitude( m_delayControls.m_lfoAmountModel.value() ); + const float amplitude = m_delayControls.m_lfoAmountModel.value() * engine::mixer()->processingSampleRate(); m_lfo->setFrequency( 1.0 / m_delayControls.m_lfoTimeModel.value() ); m_delay->setFeedback( m_delayControls.m_feedbackModel.value() ); sample_t dryS[2]; @@ -91,7 +91,7 @@ bool DelayEffect::processAudioBuffer( sampleFrame* buf, const fpp_t frames ) { dryS[0] = buf[f][0]; dryS[1] = buf[f][1]; - m_delay->setLength( ( float )length * ( float )m_lfo->tick() ); + m_delay->setLength( ( float )length + ( amplitude * ( float )m_lfo->tick() ) ); m_delay->tick( buf[f] ); buf[f][0] = ( d * dryS[0] ) + ( w * buf[f][0] ); diff --git a/plugins/delay/lfo.cpp b/plugins/delay/lfo.cpp index f0b84a089..3ae34e65b 100644 --- a/plugins/delay/lfo.cpp +++ b/plugins/delay/lfo.cpp @@ -42,11 +42,5 @@ float Lfo::tick() float output = sinf( m_phase ); m_phase += m_increment; - if( m_amplitude > 0.0001 ) - { - return ( ( output * m_amplitude + 1.0 ) * 0.5 ) ; - } else - { - return 1; - } + return output; } diff --git a/plugins/delay/lfo.h b/plugins/delay/lfo.h index 105c137b7..92b340485 100644 --- a/plugins/delay/lfo.h +++ b/plugins/delay/lfo.h @@ -56,18 +56,6 @@ public: - inline void setAmplitude( float amplitude ) - { - if( amplitude < 0.0 || amplitude > 1.0 ) - { - return; - } - m_amplitude = amplitude; - } - - - - inline void setSampleRate ( int samplerate ) { m_samplerate = samplerate; @@ -84,7 +72,6 @@ private: double m_frequency; double m_phase; double m_increment; - double m_amplitude; double m_twoPiOverSr; int m_samplerate; }; From e7cbc55c69c6186790af2aeddbf40cc3a31e26be Mon Sep 17 00:00:00 2001 From: Lukas W Date: Tue, 25 Nov 2014 18:42:41 +0100 Subject: [PATCH 2/4] Instrument view: Restrict mouse wheel tab switching Only switch the view's tab when the mouse pointer is hovering over the tabs. Closes #712. --- include/tab_widget.h | 2 +- src/gui/widgets/tab_widget.cpp | 25 ++++++++++++++----------- 2 files changed, 15 insertions(+), 12 deletions(-) diff --git a/include/tab_widget.h b/include/tab_widget.h index 83f95a9ce..50e71fedb 100644 --- a/include/tab_widget.h +++ b/include/tab_widget.h @@ -66,7 +66,7 @@ private: widgetStack m_widgets; int m_activeTab; QString m_caption; - + quint8 m_tabheight; } ; #endif diff --git a/src/gui/widgets/tab_widget.cpp b/src/gui/widgets/tab_widget.cpp index c29f7bac6..173c3304c 100644 --- a/src/gui/widgets/tab_widget.cpp +++ b/src/gui/widgets/tab_widget.cpp @@ -37,7 +37,8 @@ tabWidget::tabWidget( const QString & _caption, QWidget * _parent ) : QWidget( _parent ), m_activeTab( 0 ), - m_caption( _caption ) + m_caption( _caption ), + m_tabheight( _caption.isEmpty() ? 11: 10 ) { setFont( pointSize<8>( font() ) ); @@ -149,14 +150,13 @@ void tabWidget::paintEvent( QPaintEvent * _pe ) QColor bg_color = QApplication::palette().color( QPalette::Active, QPalette::Background ); - QLinearGradient g( 0, 0, 0, 10 ); + QLinearGradient g( 0, 0, 0, m_tabheight ); g.setColorAt( 0, bg_color.darker( 250 ) ); g.setColorAt( 0.1, bg_color.lighter( 120 ) ); g.setColorAt( 1, bg_color.darker( 250 ) ); p.fillRect( 0, 0, width() - 1, height() - 1, bg_color ); bool big_tab_captions = ( m_caption == "" ); - int add = big_tab_captions ? 1 : 0; p.setPen( bg_color.darker( 150 ) ); p.drawRect( 0, 0, width() - 1, height() - 1 ); @@ -168,17 +168,17 @@ void tabWidget::paintEvent( QPaintEvent * _pe ) p.setPen( QColor( 0, 0, 0 ) ); p.drawRect( 1, 1, width() - 3, height() - 3 ); - p.fillRect( 2, 2, width() - 4, 10 + add, g ); - p.drawLine( 2, 12 + add, width() - 3, 12 + add ); + p.fillRect( 2, 2, width() - 4, m_tabheight, g ); + p.drawLine( 2, m_tabheight + 2, width() - 3, m_tabheight + 2); - if( !big_tab_captions ) + if( ! m_caption.isEmpty() ) { p.setPen( QColor( 255, 255, 255 ) ); p.drawText( 5, 11, m_caption ); } - int cx = ( big_tab_captions ? 4 : 14 ) + - fontMetrics().width( m_caption ); + // Calculate the tabs' x (tabs are painted next to the caption) + int tab_x_offset = m_caption.isEmpty() ? 4 : 14 + fontMetrics().width( m_caption ); QColor cap_col( 160, 160, 160 ); if( big_tab_captions ) @@ -199,11 +199,11 @@ void tabWidget::paintEvent( QPaintEvent * _pe ) if( it.key() == m_activeTab ) { p.setPen( QColor( 32, 48, 64 ) ); - p.fillRect( cx, 2, ( *it ).nwidth - 6, 10, cap_col ); + p.fillRect( tab_x_offset, 2, ( *it ).nwidth - 6, 10, cap_col ); } - p.drawText( cx + 3, 10 + add, ( *it ).name ); + p.drawText( tab_x_offset + 3, m_tabheight, ( *it ).name ); p.setPen( cap_col ); - cx += ( *it ).nwidth; + tab_x_offset += ( *it ).nwidth; } } @@ -212,6 +212,9 @@ void tabWidget::paintEvent( QPaintEvent * _pe ) void tabWidget::wheelEvent( QWheelEvent * _we ) { + if (_we->y() > m_tabheight) + return; + _we->accept(); int dir = ( _we->delta() < 0 ) ? 1 : -1; int tab = m_activeTab; From 394d8da286ca01231c4e3fe7367e32a213792aa1 Mon Sep 17 00:00:00 2001 From: Lukas W Date: Tue, 25 Nov 2014 16:46:50 +0100 Subject: [PATCH 3/4] When removing a track, remove its solo state Fixes #1103 --- src/core/TrackContainer.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/core/TrackContainer.cpp b/src/core/TrackContainer.cpp index f2d065681..33a8aebeb 100644 --- a/src/core/TrackContainer.cpp +++ b/src/core/TrackContainer.cpp @@ -175,6 +175,10 @@ void TrackContainer::removeTrack( track * _track ) int index = m_tracks.indexOf( _track ); if( index != -1 ) { + // If the track is solo, all other tracks are muted. Change this before removing the solo track: + if (_track->isSolo()) { + _track->setSolo(false); + } m_tracksMutex.lockForWrite(); m_tracks.remove( index ); m_tracksMutex.unlock(); From a9bc056400ab33c85416921e58eab06d81c8d9e6 Mon Sep 17 00:00:00 2001 From: Lukas W Date: Tue, 25 Nov 2014 20:18:35 +0100 Subject: [PATCH 4/4] Piano Roll: Don't switch to select mode when pressing Ctrl+A Or don't act like we did. Fixes #431 --- src/gui/PianoRoll.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/gui/PianoRoll.cpp b/src/gui/PianoRoll.cpp index 1444389b9..2b454b381 100644 --- a/src/gui/PianoRoll.cpp +++ b/src/gui/PianoRoll.cpp @@ -1385,7 +1385,6 @@ void PianoRoll::keyPressEvent( QKeyEvent* event ) if( event->modifiers() & Qt::ControlModifier ) { event->accept(); - m_selectButton->setChecked( true ); selectAll(); update(); }