some rather simple code to allow MIDI Clock to set the tempo of the session.
This is only allowed if the session has only 1 tempo marker
This commit is contained in:
parent
8b1c8bb511
commit
970c8939d4
|
@ -734,6 +734,7 @@ public:
|
|||
|
||||
TempoMap& tempo_map() { return *_tempo_map; }
|
||||
const TempoMap& tempo_map() const { return *_tempo_map; }
|
||||
void maybe_update_tempo_from_midiclock_tempo (float bpm);
|
||||
|
||||
unsigned int get_xrun_count () const {return _xrun_count; }
|
||||
void reset_xrun_count () {_xrun_count = 0; }
|
||||
|
|
|
@ -36,6 +36,7 @@
|
|||
#include "ardour/session.h"
|
||||
#include "ardour/tempo.h"
|
||||
#include "ardour/transport_master.h"
|
||||
#include "ardour/transport_master_manager.h"
|
||||
|
||||
#include "pbd/i18n.h"
|
||||
|
||||
|
@ -219,7 +220,6 @@ MIDIClock_TransportMaster::update_midi_clock (Parser& /*parser*/, samplepos_t ti
|
|||
|
||||
const double samples_per_quarter = (timestamp - current.timestamp) * 24.0;
|
||||
const double instantaneous_bpm = (ENGINE->sample_rate() * 60.0) / samples_per_quarter;
|
||||
const double lpf_coeff = 0.05;
|
||||
|
||||
const double predicted_clock_interval_in_samples = (t1 - t0);
|
||||
|
||||
|
@ -233,6 +233,8 @@ MIDIClock_TransportMaster::update_midi_clock (Parser& /*parser*/, samplepos_t ti
|
|||
* change of more than 20% of the current tempo.
|
||||
*/
|
||||
|
||||
const double lpf_coeff = 0.063;
|
||||
|
||||
if (fabs (instantaneous_bpm - _bpm) > (0.20 * _bpm)) {
|
||||
_bpm = instantaneous_bpm;
|
||||
} else {
|
||||
|
@ -250,6 +252,10 @@ MIDIClock_TransportMaster::update_midi_clock (Parser& /*parser*/, samplepos_t ti
|
|||
|
||||
midi_clock_count++;
|
||||
current.update (current.position + one_ppqn_in_samples, timestamp, speed);
|
||||
|
||||
if (TransportMasterManager::instance().current().get() == this) {
|
||||
_session->maybe_update_tempo_from_midiclock_tempo (_bpm);
|
||||
}
|
||||
}
|
||||
|
||||
DEBUG_TRACE (DEBUG::MidiClock, string_compose ("clock #%1 @ %2 should-be %3 transport %4 error %5 appspeed %6 "
|
||||
|
|
|
@ -7276,3 +7276,16 @@ Session::cancel_all_solo ()
|
|||
set_controls (stripable_list_to_control_list (sl, &Stripable::solo_control), 0.0, Controllable::NoGroup);
|
||||
clear_all_solo_state (routes.reader());
|
||||
}
|
||||
|
||||
void
|
||||
Session::maybe_update_tempo_from_midiclock_tempo (float bpm)
|
||||
{
|
||||
if (_tempo_map->n_tempos() == 1) {
|
||||
TempoSection& ts (_tempo_map->tempo_section_at_sample (0));
|
||||
if (fabs (ts.note_types_per_minute() - bpm) > (0.01 * ts.note_types_per_minute())) {
|
||||
const Tempo tempo (bpm, 4.0, bpm);
|
||||
std::cerr << "new tempo " << bpm << " old " << ts.note_types_per_minute() << std::endl;
|
||||
_tempo_map->replace_tempo (ts, tempo, 0.0, 0.0, AudioTime);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user