mirror of
https://github.com/Ardour/ardour.git
synced 2025-12-06 14:54:56 +01:00
triggerbox: first draft: allow gui access to audio-segment meter and barcnt
This commit is contained in:
parent
8e96dd40ed
commit
6cdeed8945
2 changed files with 70 additions and 32 deletions
|
|
@ -252,6 +252,10 @@ class LIBARDOUR_API Trigger : public PBD::Stateful {
|
||||||
|
|
||||||
TriggerBox& box() const { return _box; }
|
TriggerBox& box() const { return _box; }
|
||||||
|
|
||||||
|
double estimated_tempo() const { return _estimated_tempo; }
|
||||||
|
|
||||||
|
Temporal::Meter meter() const { return _meter; }
|
||||||
|
|
||||||
gain_t gain() const { return _gain; }
|
gain_t gain() const { return _gain; }
|
||||||
void set_gain (gain_t);
|
void set_gain (gain_t);
|
||||||
|
|
||||||
|
|
@ -266,16 +270,6 @@ class LIBARDOUR_API Trigger : public PBD::Stateful {
|
||||||
Smooth,
|
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*);
|
void set_pending (Trigger*);
|
||||||
Trigger* swap_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);
|
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_start (timepos_t const &);
|
||||||
void set_end (timepos_t const &);
|
void set_end (timepos_t const &);
|
||||||
void set_legato_offset (timepos_t const &);
|
void set_legato_offset (timepos_t const &);
|
||||||
|
|
|
||||||
|
|
@ -200,16 +200,6 @@ Trigger::set_stretchable (bool s)
|
||||||
_box.session().set_dirty();
|
_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
|
void
|
||||||
Trigger::set_ui (void* p)
|
Trigger::set_ui (void* p)
|
||||||
{
|
{
|
||||||
|
|
@ -248,18 +238,6 @@ Trigger::set_gain (gain_t g)
|
||||||
_box.session().set_dirty();
|
_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
|
void
|
||||||
Trigger::set_midi_velocity_effect (float mve)
|
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_("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_("segment-tempo"), _segment_tempo);
|
||||||
|
node.get_property (X_("barcnt"), _barcnt);
|
||||||
|
|
||||||
node.get_property (X_("index"), _index);
|
node.get_property (X_("index"), _index);
|
||||||
set_values (node);
|
set_values (node);
|
||||||
|
|
@ -861,6 +840,59 @@ AudioTrigger::~AudioTrigger ()
|
||||||
delete _stretcher;
|
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
|
bool
|
||||||
AudioTrigger::stretching() const
|
AudioTrigger::stretching() const
|
||||||
{
|
{
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue