diff options
author | David Robillard <d@drobilla.net> | 2008-09-19 06:30:49 +0000 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2008-09-19 06:30:49 +0000 |
commit | 60f588f21d6ad62335d72e8dc682abf8859107ea (patch) | |
tree | b096b25cd757f6086c90f35b4358080747dc0c0a /libs/ardour | |
parent | 2539b8fc184380957ba0effa1db947ced748ab31 (diff) |
Fix parameter range stuff and automation time axis height (somewhat...).
Create a new AutomationLine when an AutomationRegionView without a line is clicked.
git-svn-id: svn://localhost/ardour2/branches/3.0@3757 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'libs/ardour')
-rw-r--r-- | libs/ardour/ardour/midi_region.h | 6 | ||||
-rw-r--r-- | libs/ardour/ardour/parameter.h | 44 | ||||
-rw-r--r-- | libs/ardour/ardour/plugin_insert.h | 2 | ||||
-rw-r--r-- | libs/ardour/audioengine.cc | 15 | ||||
-rw-r--r-- | libs/ardour/midi_track.cc | 18 | ||||
-rw-r--r-- | libs/ardour/parameter.cc | 4 | ||||
-rw-r--r-- | libs/ardour/plugin_insert.cc | 2 |
7 files changed, 65 insertions, 26 deletions
diff --git a/libs/ardour/ardour/midi_region.h b/libs/ardour/ardour/midi_region.h index 66257372a9..e0caddd954 100644 --- a/libs/ardour/ardour/midi_region.h +++ b/libs/ardour/ardour/midi_region.h @@ -80,10 +80,10 @@ class MidiRegion : public Region Controls& controls() { return midi_source()->model()->controls(); } const Controls& controls() const { return midi_source()->model()->controls(); } - boost::shared_ptr<Evoral::Control> control(Evoral::Parameter id, bool create_if_missing=false) - { return midi_source()->model()->control(id, create_if_missing); } + boost::shared_ptr<Evoral::Control> control(const Evoral::Parameter& id, bool create=false) + { return midi_source()->model()->control(id, create); } - boost::shared_ptr<const Evoral::Control> control(Evoral::Parameter id) const + boost::shared_ptr<const Evoral::Control> control(const Evoral::Parameter& id) const { return midi_source()->model()->control(id); } int exportme (ARDOUR::Session&, ARDOUR::ExportSpecification&); diff --git a/libs/ardour/ardour/parameter.h b/libs/ardour/ardour/parameter.h index dbcccd811f..9ffeb98995 100644 --- a/libs/ardour/ardour/parameter.h +++ b/libs/ardour/ardour/parameter.h @@ -47,50 +47,58 @@ public: Parameter(AutomationType type = NullAutomation, uint32_t id=0, uint8_t channel=0) : Evoral::Parameter((uint32_t)type, id, channel) { - init(type); + init_metadata(type); } +#if 0 Parameter(AutomationType type, double min, double max, double normal) : Evoral::Parameter((uint32_t)type, 0, 0, min, max, normal) {} + Parameter(const Parameter& copy) + : Evoral::Parameter(copy) + { + _min = copy._min; + _max = copy._max; + _normal = copy._max; + } +#endif + Parameter(const Evoral::Parameter& copy) : Evoral::Parameter(copy) { - init((AutomationType)_type); } - void init(AutomationType type) { - _normal = 0.0f; + static void init_metadata(AutomationType type) { + double min = 0.0f; + double max = 1.0f; + double normal = 0.0f; switch(type) { case NullAutomation: case GainAutomation: - _min = 0.0f; - _max = 2.0f; - _normal = 1.0f; + max = 2.0f; + normal = 1.0f; break; case PanAutomation: - _min = 0.0f; - _max = 1.0f; - _normal = 0.5f; + normal = 0.5f; + break; case PluginAutomation: case SoloAutomation: case MuteAutomation: case FadeInAutomation: case FadeOutAutomation: case EnvelopeAutomation: - _min = 0.0f; - _max = 2.0f; - _normal = 1.0f; + max = 2.0f; + normal = 1.0f; + break; case MidiCCAutomation: - Evoral::MIDI::ContinuousController::set_range(*this); break; case MidiPgmChangeAutomation: - Evoral::MIDI::ProgramChange::set_range(*this); break; - case MidiPitchBenderAutomation: - Evoral::MIDI::PitchBender::set_range(*this); break; case MidiChannelAftertouchAutomation: - Evoral::MIDI::ChannelAftertouch::set_range(*this); break; + Evoral::MIDI::controller_range(min, max, normal); break; + case MidiPitchBenderAutomation: + Evoral::MIDI::bender_range(min, max, normal); break; } + set_range(type, min, max, normal); } Parameter(const std::string& str); diff --git a/libs/ardour/ardour/plugin_insert.h b/libs/ardour/ardour/plugin_insert.h index f80f26098d..859c707c79 100644 --- a/libs/ardour/ardour/plugin_insert.h +++ b/libs/ardour/ardour/plugin_insert.h @@ -77,7 +77,7 @@ class PluginInsert : public Processor void set_parameter (Parameter param, float val); float get_parameter (Parameter param); - float default_parameter_value (Evoral::Parameter param); + float default_parameter_value (const Evoral::Parameter& param); struct PluginControl : public AutomationControl { diff --git a/libs/ardour/audioengine.cc b/libs/ardour/audioengine.cc index 6a76e98c3c..71481e695f 100644 --- a/libs/ardour/audioengine.cc +++ b/libs/ardour/audioengine.cc @@ -85,6 +85,21 @@ AudioEngine::AudioEngine (string client_name) } Port::set_engine (this); + + Parameter::init_metadata(NullAutomation); + Parameter::init_metadata(GainAutomation); + Parameter::init_metadata(PanAutomation); + Parameter::init_metadata(PluginAutomation); + Parameter::init_metadata(SoloAutomation); + Parameter::init_metadata(MuteAutomation); + Parameter::init_metadata(MidiCCAutomation); + Parameter::init_metadata(MidiPgmChangeAutomation); + Parameter::init_metadata(MidiPitchBenderAutomation); + Parameter::init_metadata(MidiChannelAftertouchAutomation); + Parameter::init_metadata(FadeInAutomation); + Parameter::init_metadata(FadeOutAutomation); + Parameter::init_metadata(EnvelopeAutomation); + Parameter::init_metadata(MidiCCAutomation); } AudioEngine::~AudioEngine () diff --git a/libs/ardour/midi_track.cc b/libs/ardour/midi_track.cc index c1203d7ba9..ffe8b20303 100644 --- a/libs/ardour/midi_track.cc +++ b/libs/ardour/midi_track.cc @@ -729,7 +729,23 @@ MidiTrack::write_immediate_event(size_t size, const uint8_t* buf) void MidiTrack::MidiControl::set_value(float val) { - assert(val >= _list->parameter().min()); + 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 { + valid = true; + } + + if (!valid) { + return; + } + assert(val <= _list->parameter().max()); size_t size = 3; diff --git a/libs/ardour/parameter.cc b/libs/ardour/parameter.cc index ea70ea7927..87b5d329a2 100644 --- a/libs/ardour/parameter.cc +++ b/libs/ardour/parameter.cc @@ -79,7 +79,7 @@ Parameter::Parameter(const std::string& str) PBD::warning << "Unknown Parameter '" << str << "'" << endmsg; } - init((AutomationType)_type); // set min/max/normal + init_metadata((AutomationType)_type); // set min/max/normal } @@ -114,7 +114,7 @@ Parameter::symbol() const } else if (_type == MidiChannelAftertouchAutomation) { return string_compose("midi-channel-aftertouch-%1", int(_channel)); } else { - PBD::warning << "Uninitialized Parameter to_string() called." << endmsg; + PBD::warning << "Uninitialized Parameter symbol() called." << endmsg; return ""; } } diff --git a/libs/ardour/plugin_insert.cc b/libs/ardour/plugin_insert.cc index 4f92295e55..b82ba28290 100644 --- a/libs/ardour/plugin_insert.cc +++ b/libs/ardour/plugin_insert.cc @@ -430,7 +430,7 @@ PluginInsert::automation_run (BufferSet& bufs, nframes_t nframes, nframes_t offs } float -PluginInsert::default_parameter_value (Evoral::Parameter param) +PluginInsert::default_parameter_value (const Evoral::Parameter& param) { if (param.type() != PluginAutomation) return 1.0; |