mirror of
https://github.com/Ardour/ardour.git
synced 2025-12-10 16:46:35 +01:00
Tempo ramps - bbt_time() speedup, more meter dragging performance improvements.
This commit is contained in:
parent
591a2026c0
commit
e4dfd23d2e
1 changed files with 22 additions and 8 deletions
|
|
@ -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;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue