summaryrefslogtreecommitdiff
path: root/libs/ardour/auditioner.cc
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2014-01-16 17:22:19 -0500
committerPaul Davis <paul@linuxaudiosystems.com>2014-01-16 17:22:19 -0500
commit10933e200369ecceb2c8b3a52be41b930955d269 (patch)
tree6e994c9462e2d96334d208c01661feb13b392fa0 /libs/ardour/auditioner.cc
parent8df4f674602a183b55e1d746f033a7aa95cfb330 (diff)
allow auditioning via the monitor section to work.
Ideally, we would feed the monitor section via an internal (aux) send/return, but this is an improvement over what we had before
Diffstat (limited to 'libs/ardour/auditioner.cc')
-rw-r--r--libs/ardour/auditioner.cc74
1 files changed, 55 insertions, 19 deletions
diff --git a/libs/ardour/auditioner.cc b/libs/ardour/auditioner.cc
index 9f7dd85b52..73670798d8 100644
--- a/libs/ardour/auditioner.cc
+++ b/libs/ardour/auditioner.cc
@@ -54,13 +54,31 @@ Auditioner::init ()
if (Track::init ()) {
return -1;
}
+
+ if (connect ()) {
+ return -1;
+ }
+
+ _output->changed.connect_same_thread (*this, boost::bind (&Auditioner::output_changed, this, _1, _2));
+
+ return 0;
+}
+
+Auditioner::~Auditioner ()
+{
+}
+int
+Auditioner::connect ()
+{
string left = Config->get_auditioner_output_left();
string right = Config->get_auditioner_output_right();
vector<string> outputs;
_session.engine().get_physical_outputs (DataType::AUDIO, outputs);
+ via_monitor = false;
+
if (left.empty() || left == "default") {
if (_session.monitor_out()) {
left = _session.monitor_out()->input()->audio (0)->name();
@@ -83,31 +101,49 @@ Auditioner::init ()
}
}
+ _output->disconnect (this);
+
if (left.empty() && right.empty()) {
- warning << _("no outputs available for auditioner - manual connection required") << endmsg;
+ if (_output->n_ports().n_audio() == 0) {
+ /* ports not set up, so must be during startup */
+ warning << _("no outputs available for auditioner - manual connection required") << endmsg;
+ }
} else {
- _main_outs->defer_pan_reset ();
-
- if (left.length()) {
- _output->add_port (left, this, DataType::AUDIO);
- }
-
- if (right.length()) {
- _output->add_port (right, this, DataType::AUDIO);
- }
-
- _main_outs->allow_pan_reset ();
- _main_outs->reset_panner ();
- }
+ if (_output->n_ports().n_audio() == 0) {
- _output->changed.connect_same_thread (*this, boost::bind (&Auditioner::output_changed, this, _1, _2));
+ /* create (and connect) new ports */
- return 0;
-}
+ _main_outs->defer_pan_reset ();
+
+ if (left.length()) {
+ _output->add_port (left, this, DataType::AUDIO);
+ }
+
+ if (right.length()) {
+ _output->add_port (right, this, DataType::AUDIO);
+ }
+
+ _main_outs->allow_pan_reset ();
+ _main_outs->reset_panner ();
-Auditioner::~Auditioner ()
-{
+ } else {
+
+ /* reconnect existing ports */
+
+ boost::shared_ptr<Port> oleft (_output->nth (0));
+ boost::shared_ptr<Port> oright (_output->nth (1));
+ if (oleft) {
+ oleft->connect (left);
+ }
+ if (oright) {
+ oright->connect (right);
+ }
+ }
+
+ }
+
+ return 0;
}
AudioPlaylist&