mirror of
https://github.com/Ardour/ardour.git
synced 2025-12-16 19:56:31 +01:00
Remove frame conversion for MidiRegionView::note_in_region_range(), speed up tempo dilation
This commit is contained in:
parent
93c24e4433
commit
0e63fa65b5
3 changed files with 17 additions and 10 deletions
|
|
@ -1670,12 +1670,9 @@ MidiRegionView::start_playing_midi_chord (vector<boost::shared_ptr<NoteType> > n
|
||||||
bool
|
bool
|
||||||
MidiRegionView::note_in_region_range (const boost::shared_ptr<NoteType> note, bool& visible) const
|
MidiRegionView::note_in_region_range (const boost::shared_ptr<NoteType> note, bool& visible) const
|
||||||
{
|
{
|
||||||
/* This is imprecise due to all the conversion conversion involved, so only
|
const boost::shared_ptr<ARDOUR::MidiRegion> midi_reg = midi_region();
|
||||||
hide notes if they seem to start more than one tick before the start. */
|
const bool outside = (note->time() < midi_reg->start_beats() ||
|
||||||
const framecnt_t tick_frames = Evoral::Beats::tick().to_ticks(trackview.session()->frame_rate());
|
note->time() > midi_reg->start_beats() + midi_reg->length_beats());
|
||||||
const framepos_t note_start_frames = source_beats_to_region_frames (note->time());
|
|
||||||
const bool outside = ((note_start_frames <= -tick_frames) ||
|
|
||||||
(note_start_frames >= _region->length()));
|
|
||||||
|
|
||||||
visible = (note->note() >= midi_stream_view()->lowest_note()) &&
|
visible = (note->note() >= midi_stream_view()->lowest_note()) &&
|
||||||
(note->note() <= midi_stream_view()->highest_note());
|
(note->note() <= midi_stream_view()->highest_note());
|
||||||
|
|
|
||||||
|
|
@ -102,6 +102,7 @@ class LIBARDOUR_API MidiRegion : public Region
|
||||||
|
|
||||||
void fix_negative_start ();
|
void fix_negative_start ();
|
||||||
Evoral::Beats start_beats () {return _start_beats.val(); }
|
Evoral::Beats start_beats () {return _start_beats.val(); }
|
||||||
|
Evoral::Beats length_beats () {return _length_beats.val(); }
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
virtual bool can_trim_start_before_source_start () const {
|
virtual bool can_trim_start_before_source_start () const {
|
||||||
|
|
|
||||||
|
|
@ -197,16 +197,25 @@ MidiRegion::set_length_internal (framecnt_t len, const int32_t& sub_num)
|
||||||
void
|
void
|
||||||
MidiRegion::update_after_tempo_map_change (bool /* send */)
|
MidiRegion::update_after_tempo_map_change (bool /* send */)
|
||||||
{
|
{
|
||||||
|
const framepos_t old_pos = _position;
|
||||||
|
const framepos_t old_length = _length;
|
||||||
|
const framepos_t old_start = _start;
|
||||||
|
|
||||||
Region::update_after_tempo_map_change (false);
|
Region::update_after_tempo_map_change (false);
|
||||||
|
|
||||||
/* _start has now been updated. */
|
/* _start has now been updated. */
|
||||||
_length = _session.tempo_map().frame_at_beat (beat() + _length_beats.val().to_double()) - _position;
|
_length = _session.tempo_map().frame_at_beat (beat() + _length_beats.val().to_double()) - _position;
|
||||||
|
|
||||||
PropertyChange s_and_l;
|
PropertyChange s_and_l;
|
||||||
s_and_l.add (Properties::start);
|
if (old_start != _start) {
|
||||||
s_and_l.add (Properties::length);
|
s_and_l.add (Properties::start);
|
||||||
s_and_l.add (Properties::length_beats);
|
}
|
||||||
s_and_l.add (Properties::position);
|
if (old_length != _length) {
|
||||||
|
s_and_l.add (Properties::length);
|
||||||
|
}
|
||||||
|
if (old_pos != _position) {
|
||||||
|
s_and_l.add (Properties::position);
|
||||||
|
}
|
||||||
|
|
||||||
send_change (s_and_l);
|
send_change (s_and_l);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue