summaryrefslogtreecommitdiff
path: root/libs/ardour
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2008-09-19 06:30:49 +0000
committerDavid Robillard <d@drobilla.net>2008-09-19 06:30:49 +0000
commit60f588f21d6ad62335d72e8dc682abf8859107ea (patch)
treeb096b25cd757f6086c90f35b4358080747dc0c0a /libs/ardour
parent2539b8fc184380957ba0effa1db947ced748ab31 (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.h6
-rw-r--r--libs/ardour/ardour/parameter.h44
-rw-r--r--libs/ardour/ardour/plugin_insert.h2
-rw-r--r--libs/ardour/audioengine.cc15
-rw-r--r--libs/ardour/midi_track.cc18
-rw-r--r--libs/ardour/parameter.cc4
-rw-r--r--libs/ardour/plugin_insert.cc2
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;