+ /* 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);
+ }
+ }
+ }
+ }
+