summaryrefslogtreecommitdiff
path: root/libs
diff options
context:
space:
mode:
Diffstat (limited to 'libs')
-rw-r--r--libs/ardour/ardour/region.h8
-rw-r--r--libs/ardour/luabindings.cc2
-rw-r--r--libs/ardour/midi_region.cc32
-rw-r--r--libs/ardour/midi_source.cc6
-rw-r--r--libs/ardour/region.cc30
5 files changed, 44 insertions, 34 deletions
diff --git a/libs/ardour/ardour/region.h b/libs/ardour/ardour/region.h
index fc14e98cb8..866f489037 100644
--- a/libs/ardour/ardour/region.h
+++ b/libs/ardour/ardour/region.h
@@ -175,10 +175,12 @@ class LIBARDOUR_API Region
void set_position_lock_style (PositionLockStyle ps);
void recompute_position_from_lock_style (const int32_t sub_num);
+ /* meter-based beat at the region position */
double beat () const { return _beat; }
void set_beat (double beat) { _beat = beat; }
- double pulse () const { return _pulse; }
- void set_pulse (double pulse) { _pulse = pulse; }
+ /* quarter-note beats at the region position (for use with Evoral::Beats) */
+ double pos_beats () const { return _pos_beats; }
+ void set_pos_beats (double pb) { _pos_beats = pb; }
void suspend_property_changes ();
@@ -380,7 +382,7 @@ class LIBARDOUR_API Region
/** Sync position relative to the start of our file */
PBD::Property<framepos_t> _sync_position;
- double _pulse;
+ double _pos_beats;
SourceList _sources;
/** Used when timefx are applied, so we can always use the original source */
diff --git a/libs/ardour/luabindings.cc b/libs/ardour/luabindings.cc
index 5920fc023d..3d2e8e2cbf 100644
--- a/libs/ardour/luabindings.cc
+++ b/libs/ardour/luabindings.cc
@@ -1029,7 +1029,7 @@ LuaBindings::common (lua_State* L)
.addFunction ("lower_to_bottom", &Region::lower_to_bottom)
.addFunction ("set_sync_position", &Region::set_sync_position)
.addFunction ("clear_sync_position", &Region::clear_sync_position)
- .addFunction ("pulse", &Region::pulse)
+ .addFunction ("pos_beats", &Region::pos_beats)
.addFunction ("set_hidden", &Region::set_hidden)
.addFunction ("set_muted", &Region::set_muted)
.addFunction ("set_opaque", &Region::set_opaque)
diff --git a/libs/ardour/midi_region.cc b/libs/ardour/midi_region.cc
index ec0cd95c8b..869cb487e4 100644
--- a/libs/ardour/midi_region.cc
+++ b/libs/ardour/midi_region.cc
@@ -107,7 +107,7 @@ MidiRegion::MidiRegion (boost::shared_ptr<const MidiRegion> other, frameoffset_t
, _start_beats (Properties::start_beats, 0.0)
, _length_beats (Properties::length_beats, other->_length_beats)
{
- _start_beats = (_session.tempo_map().exact_qn_at_frame (other->_position + offset, sub_num) - (other->pulse() * 4.0)) + other->_start_beats;
+ _start_beats = (_session.tempo_map().exact_qn_at_frame (other->_position + offset, sub_num) - other->pos_beats()) + other->_start_beats;
update_length_beats (sub_num);
register_properties ();
@@ -196,7 +196,7 @@ MidiRegion::clone (boost::shared_ptr<MidiSource> newsrc) const
plist.add (Properties::layer, 0);
boost::shared_ptr<MidiRegion> ret (boost::dynamic_pointer_cast<MidiRegion> (RegionFactory::create (newsrc, plist, true)));
- ret->set_pulse (pulse());
+ ret->set_pos_beats (pos_beats());
return ret;
}
@@ -227,7 +227,7 @@ void
MidiRegion::set_start_beats_from_start_frames ()
{
if (position_lock_style() == AudioTime) {
- _start_beats = (pulse() * 4.0) - _session.tempo_map().quarter_note_at_frame (_position - _start);
+ _start_beats = pos_beats() - _session.tempo_map().quarter_note_at_frame (_position - _start);
}
}
@@ -270,11 +270,10 @@ MidiRegion::update_after_tempo_map_change (bool /* send */)
For now, the musical position at the region start is retained, but subsequent events
will maintain their beat distance according to the map.
*/
- _start = _session.tempo_map().frame_at_quarter_note (pulse() * 4.0)
- - _session.tempo_map().frame_at_quarter_note ((pulse() * 4.0) - start_beats());
+ _start = _session.tempo_map().frames_between_quarter_notes (pos_beats() - start_beats(), pos_beats());
/* _length doesn't change for audio-locked regions. update length_beats to match. */
- _length_beats = _session.tempo_map().quarter_note_at_frame (_position + _length) - _session.tempo_map().quarter_note_at_frame (_position);
+ _length_beats = _session.tempo_map().quarter_note_at_frame (_position + _length) - pos_beats();
s_and_l.add (Properties::start);
s_and_l.add (Properties::length_beats);
@@ -286,7 +285,7 @@ MidiRegion::update_after_tempo_map_change (bool /* send */)
Region::update_after_tempo_map_change (false);
/* _start has now been updated. */
- _length = _session.tempo_map().frame_at_pulse (pulse() + (_length_beats / 4.0)) - _position;
+ _length = _session.tempo_map().frames_between_quarter_notes (pos_beats(), pos_beats() + _length_beats);
if (old_start != _start) {
s_and_l.add (Properties::start);
@@ -304,7 +303,7 @@ MidiRegion::update_after_tempo_map_change (bool /* send */)
void
MidiRegion::update_length_beats (const int32_t sub_num)
{
- _length_beats = _session.tempo_map().exact_qn_at_frame (_position + _length, sub_num) - (pulse() * 4.0);
+ _length_beats = _session.tempo_map().exact_qn_at_frame (_position + _length, sub_num) - pos_beats();
}
void
@@ -318,8 +317,7 @@ MidiRegion::set_position_internal (framepos_t pos, bool allow_bbt_recompute, con
}
/* set _start to new position in tempo map */
- _start = _session.tempo_map().frame_at_quarter_note (pulse() * 4.0)
- - _session.tempo_map().frame_at_quarter_note ((pulse() * 4.0) - start_beats());
+ _start = _session.tempo_map().frames_between_quarter_notes (pos_beats() - start_beats(), pos_beats());
/* in construction from src */
if (_length_beats == 0.0) {
@@ -327,12 +325,12 @@ MidiRegion::set_position_internal (framepos_t pos, bool allow_bbt_recompute, con
}
if (position_lock_style() == AudioTime) {
- _length_beats = _session.tempo_map().quarter_note_at_frame (_position + _length) - _session.tempo_map().quarter_note_at_frame (_position);
+ _length_beats = _session.tempo_map().quarter_note_at_frame (_position + _length) - pos_beats();
} else {
/* leave _length_beats alone, and change _length to reflect the state of things
at the new position (tempo map may dictate a different number of frames).
*/
- Region::set_length_internal (_session.tempo_map().frame_at_quarter_note ((pulse() * 4.0) + length_beats()) - _position, sub_num);
+ Region::set_length_internal (_session.tempo_map().frames_between_quarter_notes (pos_beats(), pos_beats() + length_beats()), sub_num);
}
}
@@ -416,8 +414,7 @@ MidiRegion::_read_at (const SourceList& /*srcs*/,
<< " _position = " << _position
<< " _start = " << _start
<< " intoffset = " << internal_offset
- << " pulse = " << pulse()
- << " start_pulse = " << start_pulse()
+ << " pos_beats = " << pos_beats()
<< " start_beat = " << _start_beats
<< endl;
#endif
@@ -435,7 +432,7 @@ MidiRegion::_read_at (const SourceList& /*srcs*/,
tracker,
filter,
_filtered_parameters,
- pulse(),
+ pos_beats(),
_start_beats
) != to_read) {
return 0; /* "read nothing" */
@@ -626,15 +623,14 @@ MidiRegion::trim_to_internal (framepos_t position, framecnt_t length, const int3
if (_position != position) {
const double pos_qn = _session.tempo_map().exact_qn_at_frame (position, sub_num);
- const double old_pos_qn = pulse() * 4.0;
+ const double old_pos_qn = pos_beats();
/* sets _pulse to new position.*/
set_position_internal (position, true, sub_num);
what_changed.add (Properties::position);
double new_start_qn = start_beats() + (pos_qn - old_pos_qn);
- const framepos_t new_start = _session.tempo_map().frame_at_quarter_note (pos_qn)
- - _session.tempo_map().frame_at_quarter_note (pos_qn - new_start_qn);
+ framepos_t new_start = _session.tempo_map().frames_between_quarter_notes (pos_qn - new_start_qn, pos_qn);
if (!verify_start_and_length (new_start, length)) {
return;
diff --git a/libs/ardour/midi_source.cc b/libs/ardour/midi_source.cc
index edfc27acb9..d1a3455ba2 100644
--- a/libs/ardour/midi_source.cc
+++ b/libs/ardour/midi_source.cc
@@ -190,12 +190,12 @@ MidiSource::midi_read (const Lock& lm,
MidiStateTracker* tracker,
MidiChannelFilter* filter,
const std::set<Evoral::Parameter>& filtered,
- const double pulse,
- const double start_beats) const
+ const double pos_beats,
+ const double start_beats) const
{
BeatsFramesConverter converter(_session.tempo_map(), source_start);
- const double start_qn = (pulse * 4.0) - start_beats;
+ const double start_qn = pos_beats - start_beats;
DEBUG_TRACE (DEBUG::MidiSourceIO,
string_compose ("MidiSource::midi_read() %5 sstart %1 start %2 cnt %3 tracker %4\n",
diff --git a/libs/ardour/region.cc b/libs/ardour/region.cc
index 7581e23671..10d123925a 100644
--- a/libs/ardour/region.cc
+++ b/libs/ardour/region.cc
@@ -177,7 +177,7 @@ Region::register_properties ()
, _position (Properties::position, 0) \
, _beat (Properties::beat, 0.0) \
, _sync_position (Properties::sync_position, (s)) \
- , _pulse (0.0) \
+ , _pos_beats (0.0) \
, _transient_user_start (0) \
, _transient_analysis_start (0) \
, _transient_analysis_end (0) \
@@ -208,7 +208,7 @@ Region::register_properties ()
, _position(Properties::position, other->_position) \
, _beat (Properties::beat, other->_beat) \
, _sync_position(Properties::sync_position, other->_sync_position) \
- , _pulse (other->_pulse) \
+ , _pos_beats (other->_pos_beats) \
, _user_transients (other->_user_transients) \
, _transient_user_start (other->_transient_user_start) \
, _transients (other->_transients) \
@@ -294,7 +294,7 @@ Region::Region (boost::shared_ptr<const Region> other)
_start = other->_start;
_beat = other->_beat;
- _pulse = other->_pulse;
+ _pos_beats = other->_pos_beats;
/* sync pos is relative to start of file. our start-in-file is now zero,
so set our sync position to whatever the the difference between
@@ -353,7 +353,7 @@ Region::Region (boost::shared_ptr<const Region> other, frameoffset_t offset, con
_start = other->_start + offset;
_beat = _session.tempo_map().exact_beat_at_frame (_position, sub_num);
- _pulse = _session.tempo_map().exact_qn_at_frame (_position, sub_num) / 4.0;
+ _pos_beats = _session.tempo_map().exact_qn_at_frame (_position, sub_num);
/* if the other region had a distinct sync point
set, then continue to use it as best we can.
@@ -550,8 +550,8 @@ Region::set_position_lock_style (PositionLockStyle ps)
_position_lock_style = ps;
if (_position_lock_style == MusicTime) {
- _beat = _session.tempo_map().beat_at_frame (_position);
- _pulse = _session.tempo_map().pulse_at_frame (_position);
+ //_beat = _session.tempo_map().beat_at_frame (_position);
+ //_pos_beats = _session.tempo_map().quarter_note_at_frame (_position);
}
send_change (Properties::position_lock_style);
@@ -687,7 +687,7 @@ Region::set_position_internal (framepos_t pos, bool allow_bbt_recompute, const i
recompute_position_from_lock_style (sub_num);
} else {
/* MusicTime dictates that we glue to ardour beats. the pulse may have changed.*/
- _pulse = _session.tempo_map().pulse_at_beat (_beat);
+ _pos_beats = _session.tempo_map().quarter_note_at_beat (_beat);
}
/* check that the new _position wouldn't make the current
@@ -706,7 +706,7 @@ void
Region::recompute_position_from_lock_style (const int32_t sub_num)
{
_beat = _session.tempo_map().exact_beat_at_frame (_position, sub_num);
- _pulse = _session.tempo_map().exact_qn_at_frame (_position, sub_num) / 4.0;
+ _pos_beats = _session.tempo_map().exact_qn_at_frame (_position, sub_num);
}
void
@@ -1865,7 +1865,19 @@ void
Region::post_set (const PropertyChange& pc)
{
if (pc.contains (Properties::position)) {
- _pulse = _session.tempo_map().pulse_at_beat (_beat);
+ if (playlist() && _session.tempo_map().frame_at_beat (_beat) != _position && position_lock_style() == MusicTime) {
+ std::cout << name()
+ << " Region::post_set MusicTime position error!!! FRAME AT BEAT : " <<_session.tempo_map().frame_at_beat (_beat)
+ << " position : " << _position << " beat : " << _beat << std::endl;
+ //_position = _session.tempo_map().frame_at_beat (_beat);
+ }
+ if (playlist() && _session.tempo_map().frame_at_beat (_beat) != _position && position_lock_style() == AudioTime) {
+ std::cout << name()
+ << " Region::post_set AudioTime position error!!! FRAME AT BEAT : " <<_session.tempo_map().frame_at_beat (_beat)
+ << " position : " << _position << " beat : " << _beat << std::endl;
+ //_beat = _session.tempo_map().beat_at_frame (_position);
+ }
+ _pos_beats = _session.tempo_map().quarter_note_at_beat (_beat);
}
}