diff --git a/src/midisequencer.cpp b/src/midisequencer.cpp --- a/src/midisequencer.cpp +++ b/src/midisequencer.cpp @@ -235,6 +235,8 @@ void MidiSequencer::setTempoFactor(unsigned int value) { float tempoFactor = (value*value + 100.0*value + 20000.0) / 40000.0; + m_midiSequencerOutputThread->setTempoFactor(tempoFactor); + drumstick::QueueTempo queueTempo = m_queue->getTempo(); queueTempo.setTempoFactor(tempoFactor); m_queue->setTempo(queueTempo); diff --git a/src/midisequenceroutputthread.h b/src/midisequenceroutputthread.h --- a/src/midisequenceroutputthread.h +++ b/src/midisequenceroutputthread.h @@ -48,6 +48,7 @@ void setVolumeFactor(unsigned int vol); void setPitchShift(int value); void setPosition(unsigned int pos); + void setTempoFactor(float value); void resetPosition(); Q_SIGNALS: @@ -65,6 +66,7 @@ int m_volume[MIDI_CHANNELS]; unsigned int m_volumeFactor; int m_pitchShift; + float m_tempoFactor; QListIterator* m_songIterator; }; diff --git a/src/midisequenceroutputthread.cpp b/src/midisequenceroutputthread.cpp --- a/src/midisequenceroutputthread.cpp +++ b/src/midisequenceroutputthread.cpp @@ -36,6 +36,7 @@ m_lastEvent(0), m_volumeFactor(100), m_pitchShift(0), + m_tempoFactor(1.0), m_songIterator(0) { for (int chan = 0; chan < MIDI_CHANNELS; ++chan) @@ -100,7 +101,7 @@ drumstick::QueueTempo firstTempo = m_Queue->getTempo(); firstTempo.setPPQ(m_song->division()); firstTempo.setTempo(m_song->initialTempo()); - firstTempo.setTempoFactor(1.0); + firstTempo.setTempoFactor(m_tempoFactor); m_Queue->setTempo(firstTempo); } @@ -131,6 +132,11 @@ start(); } +void MidiSequencerOutputThread::setTempoFactor(float value) +{ + m_tempoFactor = value; +} + void MidiSequencerOutputThread::setPosition(unsigned int pos) { m_songPosition = pos;