+
+ 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();
+ via_monitor = true;
+ } else {
+ if (outputs.size() > 0) {
+ left = outputs[0];
+ }
+ }
+ }
+
+ if (right.empty() || right == "default") {
+ if (_session.monitor_out()) {
+ right = _session.monitor_out()->input()->audio (1)->name();
+ via_monitor = true;
+ } else {
+ if (outputs.size() > 1) {
+ right = outputs[1];
+ }
+ }
+ }
+
+ _output->disconnect (this);
+
+ if (left.empty() && right.empty()) {
+ 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 {
+
+ if (_output->n_ports().n_audio() == 0) {
+
+ /* create (and connect) new ports */
+
+ _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 ();
+
+ } 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;
+}
+
+
+DataType
+Auditioner::data_type () const {
+ if (_midi_audition) {
+ return DataType::MIDI;
+ } else {
+ return DataType::AUDIO;
+ }
+}
+
+boost::shared_ptr<Diskstream>
+Auditioner::create_diskstream () {
+
+ {
+ AudioDiskstream::Flag dflags = AudioDiskstream::Flag (0);
+ dflags = AudioDiskstream::Flag (dflags | AudioDiskstream::Hidden);
+ _diskstream_audio = boost::shared_ptr<AudioDiskstream> (new AudioDiskstream (_session, name(), dflags));