diff --git a/src/midisequencer.cpp b/src/midisequencer.cpp index 255b140e6b37e1cc8b2039c405f6c140f34e7269..b307df1e30d66afac0d9df9575ac1b21591e5904 100644 --- a/src/midisequencer.cpp +++ b/src/midisequencer.cpp @@ -235,6 +235,8 @@ void MidiSequencer::setVolumeFactor(unsigned int vol) 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.cpp b/src/midisequenceroutputthread.cpp index ed6ab54055f96a2799574072b5b2961081405807..0630d1d95a00872568855d2bd3d6e68b2df448ad 100644 --- a/src/midisequenceroutputthread.cpp +++ b/src/midisequenceroutputthread.cpp @@ -36,6 +36,7 @@ MidiSequencerOutputThread::MidiSequencerOutputThread(drumstick::MidiClient *clie 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 @@ void MidiSequencerOutputThread::setSong(Song *song) 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 @@ void MidiSequencerOutputThread::setPitchShift(int value) start(); } +void MidiSequencerOutputThread::setTempoFactor(float value) +{ + m_tempoFactor = value; +} + void MidiSequencerOutputThread::setPosition(unsigned int pos) { m_songPosition = pos; diff --git a/src/midisequenceroutputthread.h b/src/midisequenceroutputthread.h index c9a32f61e25af0d279f1fe0f519094e915fc76e3..3adc22d240f757aef33bdea3e0b2114d23d01135 100644 --- a/src/midisequenceroutputthread.h +++ b/src/midisequenceroutputthread.h @@ -48,6 +48,7 @@ public: 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 @@ private: int m_volume[MIDI_CHANNELS]; unsigned int m_volumeFactor; int m_pitchShift; + float m_tempoFactor; QListIterator* m_songIterator; };