summaryrefslogtreecommitdiff
path: root/libs/ardour/midi_track.cc
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2014-10-16 21:21:11 +0200
committerRobin Gareus <robin@gareus.org>2014-10-16 21:21:45 +0200
commitd34bd9e6a04bcf9093a2a4864afce32f7db441bb (patch)
treee4b5c2a2f7ddfc04d1e6782a5bea4c1ee88718ac /libs/ardour/midi_track.cc
parent8d8717800d79fe77ff1c2f7d3957a5285d4ce263 (diff)
fix midi automation sliders
Allow controls to work without a list. see also 34c1465 and b469cd2
Diffstat (limited to 'libs/ardour/midi_track.cc')
-rw-r--r--libs/ardour/midi_track.cc20
1 files changed, 11 insertions, 9 deletions
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 &parameter = _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;