Add option to limit automatable control parmaters
[ardour.git] / libs / ardour / midi_track.cc
index 11e6bec41b463582ea5f04c0bdb8b0bee0441cc4..1608f13c7e75c80d580a29c366bf9483637b35be 100644 (file)
@@ -195,9 +195,9 @@ MidiTrack::set_state (const XMLNode& node, int version)
 }
 
 XMLNode&
-MidiTrack::state(bool full_state)
+MidiTrack::state(bool save_template)
 {
-       XMLNode& root (Track::state(full_state));
+       XMLNode& root (Track::state (save_template));
        XMLNode* freeze_node;
        char buf[64];
 
@@ -613,36 +613,37 @@ MidiTrack::MidiControl::actually_set_value (double val, PBD::Controllable::Group
                uint8_t ev[3] = { parameter.channel(), uint8_t (val), 0 };
                switch(parameter.type()) {
                case MidiCCAutomation:
-                       ev[0] += MIDI_CMD_CONTROL;
+                       ev[0] |= MIDI_CMD_CONTROL;
                        ev[1] = parameter.id();
                        ev[2] = int(val);
                        break;
 
                case MidiPgmChangeAutomation:
                        size = 2;
-                       ev[0] += MIDI_CMD_PGM_CHANGE;
+                       ev[0] |= MIDI_CMD_PGM_CHANGE;
                        ev[1] = int(val);
                        break;
 
                case MidiChannelPressureAutomation:
                        size = 2;
-                       ev[0] += MIDI_CMD_CHANNEL_PRESSURE;
+                       ev[0] |= MIDI_CMD_CHANNEL_PRESSURE;
                        ev[1] = int(val);
                        break;
 
                case MidiNotePressureAutomation:
-                       ev[0] += MIDI_CMD_NOTE_PRESSURE;
+                       ev[0] |= MIDI_CMD_NOTE_PRESSURE;
                        ev[1] = parameter.id();
                        ev[2] = int(val);
                        break;
 
                case MidiPitchBenderAutomation:
-                       ev[0] += MIDI_CMD_BENDER;
+                       ev[0] |= MIDI_CMD_BENDER;
                        ev[1] = 0x7F & int(val);
                        ev[2] = 0x7F & (int(val) >> 7);
                        break;
 
                default:
+                       size = 0;
                        assert(false);
                }
                _route->write_immediate_event(size,  ev);
@@ -826,6 +827,13 @@ MidiTrack::monitoring_state () const
        return ms;
 }
 
+MonitorState
+MidiTrack::get_auto_monitoring_state () const
+{
+       //if we are a midi track,  we ignore auto_input, tape_mode, etc etc.  "Auto" will monitor Disk+In
+       return MonitoringCue;
+}
+
 void
 MidiTrack::filter_input (BufferSet& bufs)
 {