Separate "add master bus" (and add Lua bindings)

This is in preparation for "advanced session setup" allow a SessionSetup
Lua script to create the master-bus.
This commit is contained in:
Robin Gareus 2017-08-15 23:17:08 +02:00
parent 1d8c7ef37a
commit 6ec133ebde
4 changed files with 39 additions and 23 deletions

View File

@ -866,6 +866,7 @@ class LIBARDOUR_API Session : public PBD::StatefulDestructible, public PBD::Scop
PBD::Signal0<void> session_routes_reconnected;
/* monitor/master out */
int add_master_bus (ChanCount const&);
void add_monitor_section ();
void reset_monitor_section ();

View File

@ -1970,6 +1970,11 @@ LuaBindings::common (lua_State* L)
.addFunction ("new_audio_route", &Session::new_audio_route)
.addFunction ("new_midi_track", &Session::new_midi_track)
.addFunction ("new_midi_route", &Session::new_midi_route)
.addFunction ("add_master_bus", &Session::add_master_bus)
.addFunction ("add_monitor_section", &Session::add_monitor_section)
.addFunction ("remove_monitor_section", &Session::remove_monitor_section)
.addFunction ("get_routes", &Session::get_routes)
.addFunction ("get_tracks", &Session::get_tracks)
.addFunction ("get_stripables", (StripableList (Session::*)() const)&Session::get_stripables)

View File

@ -1495,6 +1495,33 @@ Session::reset_monitor_section ()
}
}
int
Session::add_master_bus (ChanCount const& count)
{
if (master_out ()) {
return -1;
}
RouteList rl;
boost::shared_ptr<Route> r (new Route (*this, _("Master"), PresentationInfo::MasterOut, DataType::AUDIO));
if (r->init ()) {
return -1;
}
BOOST_MARK_ROUTE(r);
{
Glib::Threads::Mutex::Lock lm (AudioEngine::instance()->process_lock ());
r->input()->ensure_io (count, false, this);
r->output()->ensure_io (count, false, this);
}
rl.push_back (r);
add_routes (rl, false, false, false, PresentationInfo::max_order);
return 0;
}
void
Session::hookup_io ()
{

View File

@ -659,33 +659,16 @@ Session::create (const string& session_template, BusProfile* bus_profile)
if (bus_profile) {
RouteList rl;
ChanCount count(DataType::AUDIO, bus_profile->master_out_channels);
if (bus_profile->master_out_channels) {
int rv = add_master_bus (count);
// Waves Tracks: always create master bus for Tracks
if (ARDOUR::Profile->get_trx() || bus_profile->master_out_channels) {
boost::shared_ptr<Route> r (new Route (*this, _("Master"), PresentationInfo::MasterOut, DataType::AUDIO));
if (r->init ()) {
return -1;
if (rv) {
return rv;
}
BOOST_MARK_ROUTE(r);
{
Glib::Threads::Mutex::Lock lm (AudioEngine::instance()->process_lock ());
r->input()->ensure_io (count, false, this);
r->output()->ensure_io (count, false, this);
}
rl.push_back (r);
if (Config->get_use_monitor_bus())
add_monitor_section ();
}
if (!rl.empty()) {
add_routes (rl, false, false, false, PresentationInfo::max_order);
}
}
if (Config->get_use_monitor_bus() && bus_profile) {
add_monitor_section ();
}
return 0;