mirror of
https://github.com/Ardour/ardour.git
synced 2025-12-19 21:26:26 +01:00
triggerbox: basics of scene triggering
This commit is contained in:
parent
437840dced
commit
b65f18a56e
2 changed files with 36 additions and 0 deletions
|
|
@ -381,6 +381,11 @@ class LIBARDOUR_API TriggerBox : public Processor
|
||||||
static int first_midi_note() { return _first_midi_note; }
|
static int first_midi_note() { return _first_midi_note; }
|
||||||
static void set_first_midi_note (int n);
|
static void set_first_midi_note (int n);
|
||||||
|
|
||||||
|
static void maybe_find_scene_bang ();
|
||||||
|
static void clear_scene_bang ();
|
||||||
|
static void scene_bang (uint32_t scene_number);
|
||||||
|
static void scene_unbang (uint32_t scene_number);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
static Temporal::BBT_Offset _assumed_trigger_duration;
|
static Temporal::BBT_Offset _assumed_trigger_duration;
|
||||||
|
|
||||||
|
|
@ -421,6 +426,8 @@ class LIBARDOUR_API TriggerBox : public Processor
|
||||||
static const uint64_t default_triggers_per_box;
|
static const uint64_t default_triggers_per_box;
|
||||||
static int _first_midi_note;
|
static int _first_midi_note;
|
||||||
static TriggerMidiMapMode _midi_map_mode;
|
static TriggerMidiMapMode _midi_map_mode;
|
||||||
|
static std::atomic<int32_t> _pending_scene;
|
||||||
|
static std::atomic<int32_t> _active_scene;
|
||||||
};
|
};
|
||||||
|
|
||||||
namespace Properties {
|
namespace Properties {
|
||||||
|
|
|
||||||
|
|
@ -1322,6 +1322,8 @@ Temporal::BBT_Offset TriggerBox::_assumed_trigger_duration (4, 0, 0);
|
||||||
//TriggerBox::TriggerMidiMapMode TriggerBox::_midi_map_mode (TriggerBox::AbletonPush);
|
//TriggerBox::TriggerMidiMapMode TriggerBox::_midi_map_mode (TriggerBox::AbletonPush);
|
||||||
TriggerBox::TriggerMidiMapMode TriggerBox::_midi_map_mode (TriggerBox::SequentialNote);
|
TriggerBox::TriggerMidiMapMode TriggerBox::_midi_map_mode (TriggerBox::SequentialNote);
|
||||||
int TriggerBox::_first_midi_note = 60;
|
int TriggerBox::_first_midi_note = 60;
|
||||||
|
std::atomic<int32_t> TriggerBox::_pending_scene (-1);
|
||||||
|
std::atomic<int32_t> TriggerBox::_active_scene (-1);
|
||||||
|
|
||||||
TriggerBox::TriggerBox (Session& s, DataType dt)
|
TriggerBox::TriggerBox (Session& s, DataType dt)
|
||||||
: Processor (s, _("TriggerBox"), Temporal::BeatTime)
|
: Processor (s, _("TriggerBox"), Temporal::BeatTime)
|
||||||
|
|
@ -1352,6 +1354,33 @@ TriggerBox::TriggerBox (Session& s, DataType dt)
|
||||||
Config->ParameterChanged.connect_same_thread (*this, boost::bind (&TriggerBox::parameter_changed, this, _1));
|
Config->ParameterChanged.connect_same_thread (*this, boost::bind (&TriggerBox::parameter_changed, this, _1));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
TriggerBox::scene_bang (uint32_t n)
|
||||||
|
{
|
||||||
|
_pending_scene = n;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
TriggerBox::scene_unbang (uint32_t n)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
TriggerBox::maybe_find_scene_bang ()
|
||||||
|
{
|
||||||
|
uint32_t pending = _pending_scene.exchange (-1);
|
||||||
|
|
||||||
|
if (pending >= 0) {
|
||||||
|
_active_scene = pending;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
TriggerBox::clear_scene_bang ()
|
||||||
|
{
|
||||||
|
(void) _active_scene.exchange (-1);
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
TriggerBox::clear_implicit ()
|
TriggerBox::clear_implicit ()
|
||||||
{
|
{
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue