Add New Region Properties for Clips

This commit is contained in:
Ben Loftis 2021-11-30 12:15:04 -06:00
parent c07a7736b7
commit 045cf7709f
2 changed files with 60 additions and 2 deletions

View File

@ -75,6 +75,12 @@ namespace Properties {
LIBARDOUR_API extern PBD::PropertyDescriptor<std::string> tags;
LIBARDOUR_API extern PBD::PropertyDescriptor<bool> contents; // type doesn't matter here
LIBARDOUR_API extern PBD::PropertyDescriptor<Temporal::TimeDomain> time_domain;
LIBARDOUR_API extern PBD::PropertyDescriptor<float> bpm;
LIBARDOUR_API extern PBD::PropertyDescriptor<uint8_t> metrum_numerator; //pulses per bar (typically 4)
LIBARDOUR_API extern PBD::PropertyDescriptor<uint8_t> metrum_divisor; //divisor note type (typically 4 = quarter-note)
LIBARDOUR_API extern PBD::PropertyDescriptor<bool> sync_to_bbt;
LIBARDOUR_API extern PBD::PropertyDescriptor<bool> loop_enabled;
LIBARDOUR_API extern PBD::PropertyDescriptor<timepos_t> loop_start;
};
class Playlist;
@ -124,6 +130,14 @@ public:
timepos_t end() const;
timepos_t nt_last() const { return end().decrement(); }
/** Note: these values are currently only used when the region is in a trigger slot */
float bpm () const { return _bpm; }
uint8_t metrum_numerator () const { return _metrum_numerator; }
uint8_t metrum_divisor () const { return _metrum_divisor; }
bool sync_to_bbt () const { return _sync_to_bbt; }
bool loop_enabled () const { return _loop_enabled; }
timepos_t loop_start () const { return _loop_start.val(); }
timepos_t source_position () const;
timepos_t source_relative_position (Temporal::timepos_t const &) const;
timepos_t region_relative_position (Temporal::timepos_t const &) const;
@ -521,6 +535,14 @@ private:
PBD::Property<std::string> _tags;
PBD::Property<bool> _contents; // type is irrelevant
/* these properties are (currently) only used when the region is in a trigger slot */
PBD::Property<float> _bpm;
PBD::Property<uint8_t> _metrum_numerator; //pulses per bar (typically 4)
PBD::Property<uint8_t> _metrum_divisor; //divisor note type (typically 4 = quarter-note)
PBD::Property<bool> _sync_to_bbt;
PBD::Property<bool> _loop_enabled;
PBD::Property<timepos_t> _loop_start;
timecnt_t _last_length;
mutable RegionEditState _first_edit;
layer_t _layer;

View File

@ -83,6 +83,12 @@ namespace ARDOUR {
PBD::PropertyDescriptor<std::string> tags;
PBD::PropertyDescriptor<bool> contents;
PBD::PropertyDescriptor<Temporal::TimeDomain> time_domain;
PBD::PropertyDescriptor<float> bpm;
PBD::PropertyDescriptor<uint8_t> metrum_numerator;
PBD::PropertyDescriptor<uint8_t> metrum_divisor;
PBD::PropertyDescriptor<bool> sync_to_bbt;
PBD::PropertyDescriptor<bool> loop_enabled;
PBD::PropertyDescriptor<timepos_t> loop_start;
}
}
@ -143,6 +149,18 @@ Region::make_property_quarks ()
DEBUG_TRACE (DEBUG::Properties, string_compose ("quark for tags = %1\n", Properties::tags.property_id));
Properties::contents.property_id = g_quark_from_static_string (X_("contents"));
DEBUG_TRACE (DEBUG::Properties, string_compose ("quark for contents = %1\n", Properties::contents.property_id));
Properties::bpm.property_id = g_quark_from_static_string (X_("bpm"));
DEBUG_TRACE (DEBUG::Properties, string_compose ("quark for bpm = %1\n", Properties::bpm.property_id));
Properties::metrum_numerator.property_id = g_quark_from_static_string (X_("metrum_numerator"));
DEBUG_TRACE (DEBUG::Properties, string_compose ("quark for metrum_numerator = %1\n", Properties::metrum_numerator.property_id));
Properties::metrum_divisor.property_id = g_quark_from_static_string (X_("metrum_divisor"));
DEBUG_TRACE (DEBUG::Properties, string_compose ("quark for metrum_divisor = %1\n", Properties::metrum_divisor.property_id));
Properties::sync_to_bbt.property_id = g_quark_from_static_string (X_("sync_to_bbt"));
DEBUG_TRACE (DEBUG::Properties, string_compose ("quark for sync_to_bbt = %1\n", Properties::sync_to_bbt.property_id));
Properties::loop_enabled.property_id = g_quark_from_static_string (X_("loop_enabled"));
DEBUG_TRACE (DEBUG::Properties, string_compose ("quark for loop_enabled = %1\n", Properties::loop_enabled.property_id));
Properties::loop_start.property_id = g_quark_from_static_string (X_("loop_start"));
DEBUG_TRACE (DEBUG::Properties, string_compose ("quark for loop_start = %1\n", Properties::loop_start.property_id));
}
void
@ -174,6 +192,12 @@ Region::register_properties ()
add_property (_layering_index);
add_property (_tags);
add_property (_contents);
add_property (_bpm);
add_property (_metrum_numerator);
add_property (_metrum_divisor);
add_property (_sync_to_bbt);
add_property (_loop_enabled);
add_property (_loop_start);
}
#define REGION_DEFAULT_STATE(s,l) \
@ -204,7 +228,13 @@ Region::register_properties ()
, _shift (Properties::shift, 1.0) \
, _layering_index (Properties::layering_index, 0) \
, _tags (Properties::tags, "") \
, _contents (Properties::contents, false)
, _contents (Properties::contents, false) \
, _bpm (Properties::bpm, 110) \
, _metrum_numerator (Properties::metrum_numerator, 4) \
, _metrum_divisor (Properties::metrum_divisor, 4) \
, _sync_to_bbt (Properties::sync_to_bbt, false) \
, _loop_enabled (Properties::loop_enabled, false) \
, _loop_start (Properties::loop_start, (s))
#define REGION_COPY_STATE(other) \
_sync_marked (Properties::sync_marked, other->_sync_marked) \
@ -236,7 +266,13 @@ Region::register_properties ()
, _shift (Properties::shift, other->_shift) \
, _layering_index (Properties::layering_index, other->_layering_index) \
, _tags (Properties::tags, other->_tags) \
, _contents (Properties::contents, other->_contents)
, _contents (Properties::contents, other->_contents) \
, _bpm (Properties::bpm, other->_bpm) \
, _metrum_numerator (Properties::metrum_numerator, other->_metrum_numerator) \
, _metrum_divisor (Properties::metrum_divisor, other->_metrum_divisor) \
, _sync_to_bbt (Properties::sync_to_bbt, other->_sync_to_bbt) \
, _loop_enabled (Properties::loop_enabled, other->_loop_enabled) \
, _loop_start (Properties::loop_start, other->_loop_start)
/* derived-from-derived constructor (no sources in constructor) */
Region::Region (Session& s, timepos_t const & start, timecnt_t const & length, const string& name, DataType type)