diff --git a/include/SampleTrack.h b/include/SampleTrack.h index 289f08de493..47965d4582a 100644 --- a/include/SampleTrack.h +++ b/include/SampleTrack.h @@ -179,6 +179,7 @@ class SampleTrack : public Track public slots: void updateTcos(); void setPlayingTcos( bool isPlaying ); + void beforeRecordOn (MidiTime time); void updateEffectChannel(); void beforeRecord (); void toggleRecord(); diff --git a/include/Song.h b/include/Song.h index 6b89d7d4b1e..893c4258720 100644 --- a/include/Song.h +++ b/include/Song.h @@ -343,7 +343,7 @@ public slots: void addBBTrack(); signals: - void beforeRecord (); + void beforeRecordOn (MidiTime time); private slots: void insertBar(); diff --git a/src/core/Song.cpp b/src/core/Song.cpp index 52d7c09c951..3a23a5c50ae 100644 --- a/src/core/Song.cpp +++ b/src/core/Song.cpp @@ -108,6 +108,7 @@ Song::Song() : this, SLOT( masterPitchChanged() ) );*/ qRegisterMetaType( "Note" ); + qRegisterMetaType("MidiTime"); setType( SongContainer ); } @@ -263,9 +264,6 @@ void Song::processNextBuffer() m_vstSyncController.setPlaybackJumped( true ); emit updateSampleTracks(); - - if (isRecording ()) - emit beforeRecord (); } } @@ -274,6 +272,11 @@ void Song::processNextBuffer() m_vstSyncController.setPlaybackJumped( true ); m_playPos[m_playMode].setJumped( false ); } + + if (isRecording()) + { + emit beforeRecordOn(getPlayPos()); + } f_cnt_t framesPlayed = 0; const float framesPerTick = Engine::framesPerTick(); @@ -350,7 +353,7 @@ void Song::processNextBuffer() if (isRecording()) { - emit beforeRecord (); + emit beforeRecordOn(getPlayPos()); } emit updateSampleTracks(); } @@ -560,8 +563,6 @@ void Song::record() void Song::playAndRecord() { - emit beforeRecord (); - playSong(); m_recording = true; } diff --git a/src/tracks/SampleTrack.cpp b/src/tracks/SampleTrack.cpp index 413490cc769..0563dcb57f4 100644 --- a/src/tracks/SampleTrack.cpp +++ b/src/tracks/SampleTrack.cpp @@ -494,7 +494,7 @@ void SampleTCOView::paintEvent( QPaintEvent * pe ) float nom = Engine::getSong()->getTimeSigModel().getNumerator(); float den = Engine::getSong()->getTimeSigModel().getDenominator(); float ticksPerTact = DefaultTicksPerTact * nom / den; - + float offset = m_tco->startTimeOffset() / ticksPerTact * pixelsPerTact(); QRect r = QRect( TCO_BORDER_WIDTH + offset, spacing, qMax( static_cast( m_tco->sampleLength() * ppt / ticksPerTact ), 1 ), rect().bottom() - 2 * spacing ); @@ -560,6 +560,7 @@ SampleTrack::SampleTrack( TrackContainer* tc ) : { setName( tr( "Sample track" ) ); m_panningModel.setCenterValue( DefaultPanning ); + connect (Engine::getSong (), SIGNAL(beforeRecordOn(MidiTime)), this, SLOT(beforeRecordOn(MidiTime))); m_effectChannelModel.setRange( 0, Engine::fxMixer()->numChannels()-1, 1); connect( &m_effectChannelModel, SIGNAL( dataChanged() ), this, SLOT( updateEffectChannel() ) ); @@ -775,7 +776,8 @@ void SampleTrack::setPlayingTcos( bool isPlaying ) } } -void SampleTrack::beforeRecord() { +void SampleTrack::beforeRecordOn(MidiTime time) +{ if (isRecord ()) { bool isRecordTCOExist = false; @@ -790,7 +792,7 @@ void SampleTrack::beforeRecord() { auto fallbackRecordTCO = static_cast(createTCO (0)); fallbackRecordTCO->setRecord (true); - fallbackRecordTCO->movePosition (Engine::getSong ()->getPlayPos (Song::Mode_PlaySong)); + fallbackRecordTCO->movePosition (time); // fallbackRecordTCO->setSamplePlayLength (Engine::framesPerTick()); fallbackRecordTCO->changeLength (1); fallbackRecordTCO->setSampleStartFrame (0);