3.0 version of rev 5564 from 2.x - basic boolean plugin parameter automation (no...
[ardour.git] / libs / ardour / event_type_map.cc
index 3f36aa6632eba6fc76a659d4451135fb27aa7323..d88e5afd265a8c1693140dfbbd838e187207e92e 100644 (file)
 
 */
 
-#include <ardour/types.h>
-#include <ardour/event_type_map.h>
-#include <evoral/Parameter.hpp>
-#include <evoral/midi_events.h>
-#include <evoral/MIDIParameters.hpp>
-#include <pbd/error.h>
-#include <pbd/compose.h>
+#include <cstdio>
+#include "ardour/types.h"
+#include "ardour/event_type_map.h"
+#include "evoral/Parameter.hpp"
+#include "evoral/midi_events.h"
+#include "evoral/MIDIParameters.hpp"
+#include "pbd/error.h"
+#include "pbd/compose.h"
 
 using namespace std;
 
@@ -48,10 +49,10 @@ uint8_t
 EventTypeMap::parameter_midi_type(const Evoral::Parameter& param) const
 {
        switch (param.type()) {
-       case MidiCCAutomation:              return MIDI_CMD_CONTROL; break; 
-       case MidiPgmChangeAutomation:       return MIDI_CMD_PGM_CHANGE; break; 
-       case MidiChannelPressureAutomation: return MIDI_CMD_CHANNEL_PRESSURE; break; 
-       case MidiPitchBenderAutomation:     return MIDI_CMD_BENDER; break; 
+       case MidiCCAutomation:              return MIDI_CMD_CONTROL; break;
+       case MidiPgmChangeAutomation:       return MIDI_CMD_PGM_CHANGE; break;
+       case MidiChannelPressureAutomation: return MIDI_CMD_CHANNEL_PRESSURE; break;
+       case MidiPitchBenderAutomation:     return MIDI_CMD_BENDER; break;
        case MidiSystemExclusiveAutomation: return MIDI_CMD_COMMON_SYSEX; break;
        default: return 0;
        }
@@ -77,11 +78,11 @@ EventTypeMap::is_integer(const Evoral::Parameter& param) const
                        && param.type() <= MidiChannelPressureAutomation);
 }
 
-Evoral::ControlList::InterpolationStyle 
+Evoral::ControlList::InterpolationStyle
 EventTypeMap::interpolation_of(const Evoral::Parameter& param)
 {
        switch (param.type()) {
-       case MidiCCAutomation:              
+       case MidiCCAutomation:
                switch (param.id()) {
                case MIDI_CTL_LSB_BANK:
                case MIDI_CTL_MSB_BANK:
@@ -117,20 +118,17 @@ EventTypeMap::interpolation_of(const Evoral::Parameter& param)
                case MIDI_CTL_OMNI_ON:
                case MIDI_CTL_MONO:
                case MIDI_CTL_POLY:
-                       
-                       return Evoral::ControlList::Discrete;
-                       break;
-
-               default: return Evoral::ControlList::Linear; break;
+                       return Evoral::ControlList::Discrete; break;
+               default:
+                       return Evoral::ControlList::Linear; break;
                }
-               
-               break; 
-               
-       case MidiPgmChangeAutomation:       return Evoral::ControlList::Discrete; break; 
-       case MidiChannelPressureAutomation: return Evoral::ControlList::Linear; break; 
-       case MidiPitchBenderAutomation:     return Evoral::ControlList::Linear; break; 
+               break;
+       case MidiPgmChangeAutomation:       return Evoral::ControlList::Discrete; break;
+       case MidiChannelPressureAutomation: return Evoral::ControlList::Linear; break;
+       case MidiPitchBenderAutomation:     return Evoral::ControlList::Linear; break;
        default: assert(false);
        }
+       return Evoral::ControlList::Linear; // Not reached, suppress warnings
 }
 
 
@@ -166,9 +164,11 @@ EventTypeMap::new_parameter(uint32_t type, uint8_t channel, uint32_t id) const
                Evoral::MIDI::controller_range(min, max, normal); break;
        case MidiPitchBenderAutomation:
                Evoral::MIDI::bender_range(min, max, normal); break;
+       case MidiSystemExclusiveAutomation:
+               return p;
        }
-       
-       p.set_range(type, min, max, normal);
+
+       p.set_range(type, min, max, normal, false);
        return p;
 }
 
@@ -219,7 +219,7 @@ EventTypeMap::new_parameter(const string& str) const
                assert(channel < 16);
                p_id = 0;
                p_channel = channel;
-       } else if (str.length() > 24 && str.substr(0, 24) == "midi-channel-pressure-") {
+       } else if (str.length() > 22 && str.substr(0, 22) == "midi-channel-pressure-") {
                p_type = MidiChannelPressureAutomation;
                uint32_t channel = 0;
                sscanf(str.c_str(), "midi-channel-pressure-%d", &channel);