triggerbox: first draft: allow gui access to audio-segment meter and barcnt
This commit is contained in:
parent
8e96dd40ed
commit
6cdeed8945
|
@ -252,6 +252,10 @@ class LIBARDOUR_API Trigger : public PBD::Stateful {
|
|||
|
||||
TriggerBox& box() const { return _box; }
|
||||
|
||||
double estimated_tempo() const { return _estimated_tempo; }
|
||||
|
||||
Temporal::Meter meter() const { return _meter; }
|
||||
|
||||
gain_t gain() const { return _gain; }
|
||||
void set_gain (gain_t);
|
||||
|
||||
|
@ -266,16 +270,6 @@ class LIBARDOUR_API Trigger : public PBD::Stateful {
|
|||
Smooth,
|
||||
};
|
||||
|
||||
StretchMode stretch_mode() const { return _stretch_mode; }
|
||||
void set_stretch_mode (StretchMode);
|
||||
|
||||
double estimated_tempo() const { return _estimated_tempo; }
|
||||
double segment_tempo() const { return _segment_tempo; }
|
||||
void set_segment_tempo (double t);
|
||||
|
||||
Temporal::Meter meter() const { return _meter; }
|
||||
void set_tempo (Temporal::Meter const &);
|
||||
|
||||
void set_pending (Trigger*);
|
||||
Trigger* swap_pending (Trigger*);
|
||||
|
||||
|
@ -354,6 +348,18 @@ class LIBARDOUR_API AudioTrigger : public Trigger {
|
|||
|
||||
pframes_t run (BufferSet&, samplepos_t start_sample, samplepos_t end_sample, Temporal::Beats const & start, Temporal::Beats const & end, pframes_t nframes, pframes_t offset, bool first, double bpm, bool);
|
||||
|
||||
StretchMode stretch_mode() const { return _stretch_mode; }
|
||||
void set_stretch_mode (StretchMode);
|
||||
|
||||
double segment_tempo() const { return _segment_tempo; }
|
||||
void set_segment_tempo (double t);
|
||||
|
||||
Temporal::Meter segment_meter() const { return _meter; } //TODO: might be different?
|
||||
void set_segment_meter(Temporal::Meter const &); //TODO: disambiguated from a future midi::metrum
|
||||
|
||||
double segment_barcnt () { return _barcnt; }
|
||||
void set_segment_barcnt (double count);
|
||||
|
||||
void set_start (timepos_t const &);
|
||||
void set_end (timepos_t const &);
|
||||
void set_legato_offset (timepos_t const &);
|
||||
|
|
|
@ -200,16 +200,6 @@ Trigger::set_stretchable (bool s)
|
|||
_box.session().set_dirty();
|
||||
}
|
||||
|
||||
void
|
||||
Trigger::set_segment_tempo (double t)
|
||||
{
|
||||
if (_segment_tempo != t) {
|
||||
_segment_tempo = t; //TODO : this data will likely get stored in the SegmentDescriptor, not the trigger itself
|
||||
PropertyChanged (ARDOUR::Properties::tempo_meter);
|
||||
_box.session().set_dirty();
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
Trigger::set_ui (void* p)
|
||||
{
|
||||
|
@ -248,18 +238,6 @@ Trigger::set_gain (gain_t g)
|
|||
_box.session().set_dirty();
|
||||
}
|
||||
|
||||
void
|
||||
Trigger::set_stretch_mode (Trigger::StretchMode sm)
|
||||
{
|
||||
if (_stretch_mode == sm) {
|
||||
return;
|
||||
}
|
||||
|
||||
_stretch_mode = sm;
|
||||
PropertyChanged (Properties::stretch_mode);
|
||||
_box.session().set_dirty();
|
||||
}
|
||||
|
||||
void
|
||||
Trigger::set_midi_velocity_effect (float mve)
|
||||
{
|
||||
|
@ -367,6 +345,7 @@ Trigger::set_state (const XMLNode& node, int version)
|
|||
|
||||
node.get_property (X_("estimated-tempo"), _estimated_tempo); //TODO: for now: if we know the bpm, overwrite the value that estimate_tempo() found
|
||||
node.get_property (X_("segment-tempo"), _segment_tempo);
|
||||
node.get_property (X_("barcnt"), _barcnt);
|
||||
|
||||
node.get_property (X_("index"), _index);
|
||||
set_values (node);
|
||||
|
@ -861,6 +840,59 @@ AudioTrigger::~AudioTrigger ()
|
|||
delete _stretcher;
|
||||
}
|
||||
|
||||
void
|
||||
AudioTrigger::set_stretch_mode (Trigger::StretchMode sm)
|
||||
{
|
||||
if (_stretch_mode == sm) {
|
||||
return;
|
||||
}
|
||||
|
||||
_stretch_mode = sm;
|
||||
PropertyChanged (Properties::stretch_mode);
|
||||
_box.session().set_dirty();
|
||||
}
|
||||
|
||||
void
|
||||
AudioTrigger::set_segment_tempo (double t)
|
||||
{
|
||||
if (_segment_tempo != t) {
|
||||
_segment_tempo = t; //TODO : this data will likely get stored in the SegmentDescriptor, not the trigger itself
|
||||
PropertyChanged (ARDOUR::Properties::tempo_meter);
|
||||
_box.session().set_dirty();
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
AudioTrigger::set_segment_meter (Temporal::Meter const &m)
|
||||
{
|
||||
if (_meter != m) {
|
||||
_meter = m;
|
||||
|
||||
//given a meter from the user, tempo is assumed constant and we re-calc barcnt internally
|
||||
const double seconds = (double) data.length / _box.session().sample_rate();
|
||||
const double quarters = (seconds / 60.) * _segment_tempo;
|
||||
_barcnt = quarters / _meter.divisions_per_bar();
|
||||
|
||||
PropertyChanged (ARDOUR::Properties::tempo_meter);
|
||||
_box.session().set_dirty();
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
AudioTrigger::set_segment_barcnt (double count)
|
||||
{
|
||||
if (_barcnt != count) {
|
||||
_barcnt = count;
|
||||
|
||||
//given a barcnt from the user, meter is assumed constant and we re-calc tempo internally
|
||||
const double seconds = (double) data.length / _box.session().sample_rate();
|
||||
const double quarters = _barcnt * _meter.divisions_per_bar(); //TODO: this assumes note_value=quarter
|
||||
_estimated_tempo = quarters / (seconds/60.0);
|
||||
|
||||
set_segment_tempo(_estimated_tempo);
|
||||
}
|
||||
}
|
||||
|
||||
bool
|
||||
AudioTrigger::stretching() const
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue
Block a user