diff options
author | Robin Gareus <robin@gareus.org> | 2014-10-16 21:21:11 +0200 |
---|---|---|
committer | Robin Gareus <robin@gareus.org> | 2014-10-16 21:21:45 +0200 |
commit | d34bd9e6a04bcf9093a2a4864afce32f7db441bb (patch) | |
tree | e4b5c2a2f7ddfc04d1e6782a5bea4c1ee88718ac /libs | |
parent | 8d8717800d79fe77ff1c2f7d3957a5285d4ce263 (diff) |
fix midi automation sliders
Allow controls to work without a list. see also 34c1465 and b469cd2
Diffstat (limited to 'libs')
-rw-r--r-- | libs/ardour/automation_control.cc | 2 | ||||
-rw-r--r-- | libs/ardour/midi_track.cc | 20 |
2 files changed, 13 insertions, 9 deletions
diff --git a/libs/ardour/automation_control.cc b/libs/ardour/automation_control.cc index 2bb694c7e5..f1305609ef 100644 --- a/libs/ardour/automation_control.cc +++ b/libs/ardour/automation_control.cc @@ -117,6 +117,7 @@ AutomationControl::set_automation_style (AutoStyle as) void AutomationControl::start_touch(double when) { + if (!_list) return; if (!touching()) { if (alist()->automation_state() == Touch) { alist()->start_touch (when); @@ -129,6 +130,7 @@ AutomationControl::start_touch(double when) void AutomationControl::stop_touch(bool mark, double when) { + if (!_list) return; if (touching()) { set_touching (false); if (alist()->automation_state() == Touch) { diff --git a/libs/ardour/midi_track.cc b/libs/ardour/midi_track.cc index 3866eb4d80..0dab684ac2 100644 --- a/libs/ardour/midi_track.cc +++ b/libs/ardour/midi_track.cc @@ -643,15 +643,17 @@ MidiTrack::set_parameter_automation_state (Evoral::Parameter param, AutoState st void MidiTrack::MidiControl::set_value(double val) { + const Evoral::Parameter ¶meter = _list ? _list->parameter() : Control::parameter(); + bool valid = false; if (isinf(val)) { cerr << "MIDIControl value is infinity" << endl; } else if (isnan(val)) { cerr << "MIDIControl value is NaN" << endl; - } else if (val < _list->parameter().min()) { - cerr << "MIDIControl value is < " << _list->parameter().min() << endl; - } else if (val > _list->parameter().max()) { - cerr << "MIDIControl value is > " << _list->parameter().max() << endl; + } else if (val < parameter.min()) { + cerr << "MIDIControl value is < " << parameter.min() << endl; + } else if (val > parameter.max()) { + cerr << "MIDIControl value is > " << parameter.max() << endl; } else { valid = true; } @@ -660,14 +662,14 @@ MidiTrack::MidiControl::set_value(double val) return; } - assert(val <= _list->parameter().max()); - if ( ! automation_playback()) { + assert(val <= parameter.max()); + if ( ! _list || ! automation_playback()) { size_t size = 3; - uint8_t ev[3] = { _list->parameter().channel(), uint8_t (val), 0 }; - switch(_list->parameter().type()) { + uint8_t ev[3] = { parameter.channel(), uint8_t (val), 0 }; + switch(parameter.type()) { case MidiCCAutomation: ev[0] += MIDI_CMD_CONTROL; - ev[1] = _list->parameter().id(); + ev[1] = parameter.id(); ev[2] = int(val); break; |