diff --git a/ChangeLog b/ChangeLog index 4f017c5ed..1fb8fdd5e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,29 @@ 2008-07-05 Tobias Doerffel + * include/instrument_track.h: + * src/tracks/instrument_track.cpp: + - set hand-cursor for instrument-track-window button + - in instrumentTrack::processInEvent() lock mixer in outer branch + + * include/instrument.h: + added note for scheduled removal of monophonic-property + + * include/note_play_handle.h: + made m_released volatile + + * src/core/note_play_handle.cpp: + - instantly exit noteOff() if already released + - manually unlink references to itself in instrumentTrack (fixes + segfaults in various situations) + + * src/core/envelope_and_lfo_parameters.cpp: + * src/core/instrument_functions.cpp: + * src/core/ladspa_control.cpp: + fixed tempo-sync-models (closes #2010776) + + * src/core/mixer.cpp: + cleanups + * src/tracks/automation_track.cpp: made muting automation-tracks work (closes #2010770) diff --git a/include/instrument_track.h b/include/instrument_track.h index e905438af..8bee54fdd 100644 --- a/include/instrument_track.h +++ b/include/instrument_track.h @@ -319,7 +319,7 @@ private: // widgets on the top of an instrument-track-window tabWidget * m_generalSettingsWidget; - QLineEdit * m_instrumentNameLE; + QLineEdit * m_nameLineEdit; knob * m_volumeKnob; knob * m_panningKnob; knob * m_pitchKnob; diff --git a/src/tracks/instrument_track.cpp b/src/tracks/instrument_track.cpp index b547c4b7f..a217b9495 100644 --- a/src/tracks/instrument_track.cpp +++ b/src/tracks/instrument_track.cpp @@ -246,6 +246,10 @@ void instrumentTrack::processInEvent( const midiEvent & _me, case MidiNoteOff: { + if( _lock ) // TO BE REMOVED + { + engine::getMixer()->lock(); + } notePlayHandle * n = m_notes[_me.key()]; if( n != NULL ) { @@ -255,24 +259,21 @@ void instrumentTrack::processInEvent( const midiEvent & _me, // this is for example needed by piano-roll for // recording notes into a pattern note done_note( - midiTime( static_cast( - n->totalFramesPlayed() / - engine::framesPerTick() ) ), + midiTime( static_cast( + n->totalFramesPlayed() / + engine::framesPerTick() ) ), 0, n->key(), n->getVolume(), n->getPanning() ); - if( _lock ) - { - // lock our play-handle while calling noteOff() - // for not modifying it's member variables - // asynchronously (while rendering!) - // which can result in segfaults - engine::getMixer()->lock(); - n->noteOff(); - engine::getMixer()->unlock(); - } + + n->noteOff(); m_notes[_me.key()] = NULL; + emit noteDone( done_note ); } + if( _lock ) // TO BE REMOVED + { + engine::getMixer()->unlock(); + } break; } @@ -359,6 +360,7 @@ void instrumentTrack::playNote( notePlayHandle * _n, bool _try_parallelizing, if( _n->arpBaseNote() == FALSE && m_instrument != NULL ) { + // TO BE REMOVED if( m_instrument->isMonophonic() ) { constNotePlayHandleVector v = @@ -383,7 +385,8 @@ void instrumentTrack::playNote( notePlayHandle * _n, bool _try_parallelizing, !( *youngest_note )->arpBaseNote() && !_n->released() ) { - processInEvent( midiEvent( MidiNoteOff, 0, + processInEvent(midiEvent( + MidiNoteOff, 0, _n->key(), 0 ), midiTime(), FALSE ); if( ( *youngest_note )->offset() > @@ -1104,11 +1107,11 @@ instrumentTrackWindow::instrumentTrackWindow( instrumentTrackView * _itv ) : m_generalSettingsWidget->setFixedHeight( 90 ); // setup line-edit for changing channel-name - m_instrumentNameLE = new QLineEdit( m_generalSettingsWidget ); - m_instrumentNameLE->setFont( pointSize<8>( - m_instrumentNameLE->font() ) ); - m_instrumentNameLE->setGeometry( 10, 16, 230, 18 ); - connect( m_instrumentNameLE, SIGNAL( textChanged( const QString & ) ), + m_nameLineEdit = new QLineEdit( m_generalSettingsWidget ); + m_nameLineEdit->setFont( pointSize<8>( + m_nameLineEdit->font() ) ); + m_nameLineEdit->setGeometry( 10, 16, 230, 18 ); + connect( m_nameLineEdit, SIGNAL( textChanged( const QString & ) ), this, SLOT( textChanged( const QString & ) ) ); @@ -1240,7 +1243,7 @@ void instrumentTrackWindow::modelChanged( void ) { m_track = castModel(); - m_instrumentNameLE->setText( m_track->name() ); + m_nameLineEdit->setText( m_track->name() ); disconnect( m_track, SIGNAL( nameChanged() ) ); disconnect( m_track, SIGNAL( instrumentChanged() ) ); @@ -1308,9 +1311,9 @@ void instrumentTrackWindow::updateName( void ) { setWindowTitle( m_track->name() ); - if( m_instrumentNameLE->text() != m_track->name() ) + if( m_nameLineEdit->text() != m_track->name() ) { - m_instrumentNameLE->setText( m_track->name() ); + m_nameLineEdit->setText( m_track->name() ); } } @@ -1466,6 +1469,7 @@ instrumentTrackButton::instrumentTrackButton( instrumentTrackView * _itv ) : m_instrumentTrackView( _itv ) { setAcceptDrops( TRUE ); + setCursor( QCursor( embed::getIconPixmap( "hand" ), 0, 0 ) ); }