Tempo ramps - bbt_time() speedup, more meter dragging performance improvements.

This commit is contained in:
nick_m 2016-03-24 23:22:28 +11:00
parent 591a2026c0
commit e4dfd23d2e

View file

@ -1397,12 +1397,25 @@ TempoMap::recompute_meters (Metrics& metrics)
if (meter->position_lock_style() == AudioTime) {
pair<double, BBT_Time> bt = make_pair (accumulated_beats, BBT_Time (accumulated_bars + 1, 1, 0));
meter->set_beat (bt);
meter->set_pulse (pulse_at_frame_locked (metrics, meter->frame()));
if (prev_m) {
const double pulse = prev_m->pulse() + (meter->beat() - prev_m->beat()) / prev_m->note_divisor();
meter->set_pulse (pulse);
} else {
const double pulse = pulse_at_frame_locked (metrics, meter->frame());
meter->set_pulse (pulse);
}
} else {
const double pulse = prev_m->pulse() + (meter->beat() - prev_m->beat()) / prev_m->note_divisor();
meter->set_frame (frame_at_pulse_locked (metrics, pulse));
meter->set_pulse (pulse);
if (prev_m) {
const double pulse = prev_m->pulse() + (meter->beat() - prev_m->beat()) / prev_m->note_divisor();
meter->set_frame (frame_at_pulse_locked (metrics, pulse));
meter->set_pulse (pulse);
} else {
const double pulse = pulse_at_beat_locked (metrics, meter->beat());
meter->set_frame (frame_at_pulse_locked (metrics, pulse));
meter->set_pulse (pulse);
}
}
prev_m = meter;
}
}
@ -1562,8 +1575,7 @@ TempoMap::bbt_time (framepos_t frame, BBT_Time& bbt)
return;
}
Glib::Threads::RWLock::ReaderLock lm (lock);
frameoffset_t const frame_off = frame_offset_at (_metrics, frame);
double const beat = beat_at_pulse_locked (_metrics, pulse_at_frame_locked (_metrics, frame + frame_off));
double const beat = beat_at_frame_locked (_metrics, frame);
bbt = beats_to_bbt_locked (_metrics, beat);
}
@ -2120,7 +2132,8 @@ TempoMap::solve_map (Metrics& imaginary, MeterSection* section, const Meter& mt,
} else {
pair<double, BBT_Time> b_bbt = make_pair (accumulated_beats, BBT_Time (accumulated_bars + 1, 1, 0));
m->set_beat (b_bbt);
m->set_pulse (pulse_at_frame_locked (imaginary, m->frame()));
const double pulse = prev_ms->pulse() + (m->beat() - prev_ms->beat()) / prev_ms->note_divisor();
m->set_pulse (pulse);
}
}
prev_ms = m;
@ -2175,7 +2188,8 @@ TempoMap::solve_map (Metrics& imaginary, MeterSection* section, const Meter& mt,
} else {
pair<double, BBT_Time> b_bbt = make_pair (accumulated_beats, BBT_Time (accumulated_bars + 1, 1, 0));
m->set_beat (b_bbt);
m->set_pulse (pulse_at_frame_locked (imaginary, m->frame()));
const double pulse = prev_ms->pulse() + (m->beat() - prev_ms->beat()) / prev_ms->note_divisor();
m->set_pulse (pulse);
}
}
prev_ms = m;