if (_solo_release->exclusive) {
} else {
- _session->set_solo (_solo_release->routes, _solo_release->active, Session::rt_cleanup, true);
+ if (Config->get_solo_control_is_listen_control()) {
+ _session->set_listen (_solo_release->routes, _solo_release->active, Session::rt_cleanup, true);
+ } else {
+ _session->set_solo (_solo_release->routes, _solo_release->active, Session::rt_cleanup, true);
+ }
}
delete _solo_release;
}
bool auditioning() const { return g_atomic_int_get (&_auditioning); }
+ bool needs_monitor() const { return via_monitor; }
private:
boost::shared_ptr<AudioRegion> the_region;
mutable gint _auditioning;
Glib::Mutex lock;
nframes_t length;
+ bool via_monitor;
void drop_ports ();
static void *_drop_ports (void *);
Auditioner::Auditioner (Session& s)
: AudioTrack (s, "auditioner", Route::Hidden)
+ , current_frame (0)
+ , _auditioning (0)
+ , length (0)
+ , via_monitor (false)
{
}
if (left == "default") {
if (_session.monitor_out()) {
left = _session.monitor_out()->input()->audio (0)->name();
+ via_monitor = true;
} else {
left = _session.engine().get_nth_physical_output (DataType::AUDIO, 0);
}
if (right == "default") {
if (_session.monitor_out()) {
right = _session.monitor_out()->input()->audio (1)->name();
+ via_monitor = true;
} else {
right = _session.engine().get_nth_physical_output (DataType::AUDIO, 1);
}
_output->changed.connect_same_thread (*this, boost::bind (&Auditioner::output_changed, this, _1, _2));
- the_region.reset ((AudioRegion*) 0);
- g_atomic_int_set (&_auditioning, 0);
-
return 0;
}
/* if using a monitor section, run it because otherwise we don't hear anything */
- if (_monitor_out) {
+ if (auditioner->needs_monitor()) {
_monitor_out->passthru (_transport_frame, _transport_frame + nframes, nframes, false);
}