summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libs/ardour/ardour/mute_master.h2
-rw-r--r--libs/ardour/io.cc4
-rw-r--r--libs/ardour/lv2_plugin.cc11
-rw-r--r--libs/ardour/mute_master.cc8
-rw-r--r--libs/ardour/plugin_insert.cc8
-rw-r--r--libs/ardour/region.cc8
-rw-r--r--libs/ardour/route.cc189
7 files changed, 169 insertions, 61 deletions
diff --git a/libs/ardour/ardour/mute_master.h b/libs/ardour/ardour/mute_master.h
index 0e3c10b795..925d679674 100644
--- a/libs/ardour/ardour/mute_master.h
+++ b/libs/ardour/ardour/mute_master.h
@@ -23,6 +23,7 @@
#include "evoral/Parameter.hpp"
#include "pbd/signals.h"
#include "pbd/stateful.h"
+#include <string>
namespace ARDOUR {
@@ -61,6 +62,7 @@ class MuteMaster : public PBD::Stateful
XMLNode& get_state();
int set_state(const XMLNode&, int version);
+ int set_state(std::string mute_point);
private:
MutePoint _mute_point;
diff --git a/libs/ardour/io.cc b/libs/ardour/io.cc
index 9da9bf2a28..29659a2d0c 100644
--- a/libs/ardour/io.cc
+++ b/libs/ardour/io.cc
@@ -748,8 +748,12 @@ IO::get_port_counts_2X (XMLNode const & node, int /*version*/, ChanCount& n, boo
if ((prop = node.property ("inputs")) != 0 && _direction == Input) {
n_audio = count (prop->value().begin(), prop->value().end(), '{');
+ } else if ((prop = node.property ("input-connection")) != 0 && _direction == Input) {
+ n_audio = 1;
} else if ((prop = node.property ("outputs")) != 0 && _direction == Output) {
n_audio = count (prop->value().begin(), prop->value().end(), '{');
+ } else if ((prop = node.property ("output-connection")) != 0 && _direction == Output) {
+ n_audio = 2;
}
}
diff --git a/libs/ardour/lv2_plugin.cc b/libs/ardour/lv2_plugin.cc
index faaf41fd35..368c521d0b 100644
--- a/libs/ardour/lv2_plugin.cc
+++ b/libs/ardour/lv2_plugin.cc
@@ -352,7 +352,7 @@ LV2Plugin::has_editor() const
}
int
-LV2Plugin::set_state(const XMLNode& node, int /*version*/)
+LV2Plugin::set_state(const XMLNode& node, int version)
{
XMLNodeList nodes;
XMLProperty *prop;
@@ -368,8 +368,12 @@ LV2Plugin::set_state(const XMLNode& node, int /*version*/)
return -1;
}
- nodes = node.children ("Port");
-
+ if (version < 3000){
+ nodes = node.children ("port");
+ } else {
+ nodes = node.children ("Port");
+ }
+
for (iter = nodes.begin(); iter != nodes.end(); ++iter){
child = *iter;
@@ -382,6 +386,7 @@ LV2Plugin::set_state(const XMLNode& node, int /*version*/)
}
map<string,uint32_t>::iterator i = _port_indices.find(sym);
+
if (i != _port_indices.end()) {
port_id = i->second;
} else {
diff --git a/libs/ardour/mute_master.cc b/libs/ardour/mute_master.cc
index e7810b27fd..45499696a9 100644
--- a/libs/ardour/mute_master.cc
+++ b/libs/ardour/mute_master.cc
@@ -77,6 +77,14 @@ MuteMaster::mute_gain_at (MutePoint mp) const
}
int
+MuteMaster::set_state (std::string mute_point)
+{
+ _mute_point = (MutePoint) string_2_enum (mute_point, _mute_point);
+
+ return 0;
+}
+
+int
MuteMaster::set_state (const XMLNode& node, int /*version*/)
{
const XMLProperty* prop;
diff --git a/libs/ardour/plugin_insert.cc b/libs/ardour/plugin_insert.cc
index 2ad4d4b350..af908a2036 100644
--- a/libs/ardour/plugin_insert.cc
+++ b/libs/ardour/plugin_insert.cc
@@ -798,8 +798,11 @@ PluginInsert::set_state(const XMLNode& node, int version)
set_automatable ();
}
+ /* Handle the node list for this Processor (or Insert if an A2 session) */
for (niter = nlist.begin(); niter != nlist.end(); ++niter) {
+
if ((*niter)->name() == plugin->state_node_name()) {
+
for (Plugins::iterator i = _plugins.begin(); i != _plugins.end(); ++i) {
(*i)->set_state (**niter, version);
}
@@ -808,6 +811,7 @@ PluginInsert::set_state(const XMLNode& node, int version)
}
if (version < 3000) {
+
for (niter = nlist.begin(); niter != nlist.end(); ++niter) {
if ((*niter)->name() == "Redirect") {
/* XXX do we need to tackle placement? i think not (pd; oct 16 2009) */
@@ -815,7 +819,9 @@ PluginInsert::set_state(const XMLNode& node, int version)
break;
}
}
+
set_parameter_state_2X (node, version);
+
} else {
Processor::set_state (node, version);
set_parameter_state (node, version);
@@ -910,7 +916,7 @@ PluginInsert::set_parameter_state_2X (const XMLNode& node, int version)
cnodes = (*niter)->children ("port");
- for(iter = cnodes.begin(); iter != cnodes.end(); ++iter){
+ for (iter = cnodes.begin(); iter != cnodes.end(); ++iter){
child = *iter;
diff --git a/libs/ardour/region.cc b/libs/ardour/region.cc
index b89ad2854b..acd4e1b9dc 100644
--- a/libs/ardour/region.cc
+++ b/libs/ardour/region.cc
@@ -1214,6 +1214,14 @@ Region::_set_state (const XMLNode& node, int version, PropertyChange& what_chang
cerr << endl;
send_change (what_changed);
}
+
+ /* Quick fix for 2.x sessions when region is muted */
+ if ((prop = node.property (X_("flags")))) {
+ if (string::npos != prop->value().find("Muted")){
+ set_muted (true);
+ }
+ }
+
return 0;
}
diff --git a/libs/ardour/route.cc b/libs/ardour/route.cc
index f94d72ef77..d4bef14176 100644
--- a/libs/ardour/route.cc
+++ b/libs/ardour/route.cc
@@ -2037,11 +2037,6 @@ Route::_set_state_2X (const XMLNode& node, int version)
/* 2X things which still remain to be handled:
* default-type
- * muted
- * mute-affects-pre-fader
- * mute-affects-post-fader
- * mute-affects-control-outs
- * mute-affects-main-outs
* automation
* controlouts
*/
@@ -2056,58 +2051,7 @@ Route::_set_state_2X (const XMLNode& node, int version)
} else {
_flags = Flag (0);
}
-
- /* add standard processors */
-
- _meter.reset (new PeakMeter (_session));
- add_processor (_meter, PreFader);
-
- if (is_monitor()) {
- /* where we listen to tracks */
- _intreturn.reset (new InternalReturn (_session));
- add_processor (_intreturn, PreFader);
-
- _monitor_control.reset (new MonitorProcessor (_session));
- add_processor (_monitor_control, PostFader);
- }
-
- _main_outs.reset (new Delivery (_session, _output, _mute_master, _name, Delivery::Main));
- add_processor (_main_outs, PostFader);
-
- /* IOs */
-
- nlist = node.children ();
- for (niter = nlist.begin(); niter != nlist.end(); ++niter) {
-
- child = *niter;
-
- if (child->name() == IO::state_node_name) {
-
- /* there is a note in IO::set_state_2X() about why we have to call
- this directly.
- */
-
- _input->set_state_2X (*child, version, true);
- _output->set_state_2X (*child, version, false);
-
- if ((prop = child->property (X_("name"))) != 0) {
- set_name (prop->value ());
- }
-
- if ((prop = child->property (X_("id"))) != 0) {
- _id = prop->value ();
- }
-
- if ((prop = child->property (X_("active"))) != 0) {
- bool yn = string_is_affirmative (prop->value());
- _active = !yn; // force switch
- set_active (yn);
- }
- }
-
- /* XXX: panners? */
- }
-
+
if ((prop = node.property (X_("phase-invert"))) != 0) {
set_phase_invert (string_is_affirmative (prop->value()));
}
@@ -2124,6 +2068,65 @@ Route::_set_state_2X (const XMLNode& node, int version)
set_solo (yn, this);
}
+ if ((prop = node.property (X_("muted"))) != 0) {
+
+ bool first = true;
+ bool muted = string_is_affirmative (prop->value());
+
+ if(muted){
+
+ string mute_point;
+
+ if ((prop = node.property (X_("mute-affects-pre-fader"))) != 0) {
+
+ if (string_is_affirmative (prop->value())){
+ mute_point = mute_point + "PreFader";
+ first = false;
+ }
+ }
+
+ if ((prop = node.property (X_("mute-affects-post-fader"))) != 0) {
+
+ if (string_is_affirmative (prop->value())){
+
+ if (!first) {
+ mute_point = mute_point + ",";
+ }
+
+ mute_point = mute_point + "PostFader";
+ first = false;
+ }
+ }
+
+ if ((prop = node.property (X_("mute-affects-control-outs"))) != 0) {
+
+ if (string_is_affirmative (prop->value())){
+
+ if (!first) {
+ mute_point = mute_point + ",";
+ }
+
+ mute_point = mute_point + "Listen";
+ first = false;
+ }
+ }
+
+ if ((prop = node.property (X_("mute-affects-main-outs"))) != 0) {
+
+ if (string_is_affirmative (prop->value())){
+
+ if (!first) {
+ mute_point = mute_point + ",";
+ }
+
+ mute_point = mute_point + "Main";
+ }
+ }
+
+ _mute_master->set_state (mute_point);
+ }
+ }
+
if ((prop = node.property (X_("meter-point"))) != 0) {
_meter_point = MeterPoint (string_2_enum (prop->value (), _meter_point));
}
@@ -2163,6 +2166,78 @@ Route::_set_state_2X (const XMLNode& node, int version)
}
}
+ /* add standard processors */
+
+ //_meter.reset (new PeakMeter (_session));
+ //add_processor (_meter, PreFader);
+
+ if (is_monitor()) {
+ /* where we listen to tracks */
+ _intreturn.reset (new InternalReturn (_session));
+ add_processor (_intreturn, PreFader);
+
+ _monitor_control.reset (new MonitorProcessor (_session));
+ add_processor (_monitor_control, PostFader);
+ }
+
+ _main_outs.reset (new Delivery (_session, _output, _mute_master, _name, Delivery::Main));
+ add_processor (_main_outs, PostFader);
+
+ /* IOs */
+
+ nlist = node.children ();
+ for (niter = nlist.begin(); niter != nlist.end(); ++niter) {
+
+ child = *niter;
+
+ if (child->name() == IO::state_node_name) {
+
+ /* there is a note in IO::set_state_2X() about why we have to call
+ this directly.
+ */
+
+ _input->set_state_2X (*child, version, true);
+ _output->set_state_2X (*child, version, false);
+
+ if ((prop = child->property (X_("name"))) != 0) {
+ Route::set_name (prop->value ());
+ }
+
+ if ((prop = child->property (X_("id"))) != 0) {
+ _id = prop->value ();
+ }
+
+ if ((prop = child->property (X_("active"))) != 0) {
+ bool yn = string_is_affirmative (prop->value());
+ _active = !yn; // force switch
+ set_active (yn);
+ }
+
+ if ((prop = child->property (X_("gain"))) != 0) {
+ gain_t val;
+
+ if (sscanf (prop->value().c_str(), "%f", &val) == 1) {
+ _amp->gain_control()->set_value (val);
+ }
+ }
+
+ /* Set up Panners in the IO */
+ XMLNodeList io_nlist = child->children ();
+
+ XMLNodeConstIterator io_niter;
+ XMLNode *io_child;
+
+ for (io_niter = io_nlist.begin(); io_niter != io_nlist.end(); ++io_niter) {
+
+ io_child = *io_niter;
+
+ if (io_child->name() == X_("Panner")) {
+ _main_outs->panner()->set_state(*io_child, version);
+ }
+ }
+ }
+ }
+
XMLNodeList redirect_nodes;
for (niter = nlist.begin(); niter != nlist.end(); ++niter){