provide an easier way to add mixed (audio+MIDI) tracks to a session, to facilitate the use of plugins like Reaktor which accept both audio & MIDI data. there's probably still a paradigm shift waiting to happen here but its likely post-3.0.

git-svn-id: svn://localhost/ardour2/branches/3.0@12816 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
Paul Davis 2012-06-22 01:45:16 +00:00
parent 774e55bcc0
commit d70429a066
7 changed files with 145 additions and 61 deletions

View file

@ -753,7 +753,6 @@ void
ARDOUR_UI::finish()
{
if (_session) {
int tries = 0;
if (_session->dirty()) {
vector<string> actions;
@ -1361,7 +1360,8 @@ ARDOUR_UI::open_session ()
void
ARDOUR_UI::session_add_midi_route (bool disk, RouteGroup* route_group, uint32_t how_many, const string& name_template, PluginInfoPtr instrument)
ARDOUR_UI::session_add_mixed_track (const ChanCount& input, const ChanCount& output, RouteGroup* route_group,
uint32_t how_many, const string& name_template, PluginInfoPtr instrument)
{
list<boost::shared_ptr<MidiTrack> > tracks;
@ -1371,18 +1371,14 @@ ARDOUR_UI::session_add_midi_route (bool disk, RouteGroup* route_group, uint32_t
}
try {
if (disk) {
tracks = _session->new_midi_track (instrument, ARDOUR::Normal, route_group, how_many, name_template);
if (tracks.size() != how_many) {
if (how_many == 1) {
error << _("could not create a new midi track") << endmsg;
} else {
error << string_compose (_("could not create %1 new midi tracks"), how_many) << endmsg;
}
tracks = _session->new_midi_track (input, output, instrument, ARDOUR::Normal, route_group, how_many, name_template);
if (tracks.size() != how_many) {
if (how_many == 1) {
error << _("could not create a new mixed track") << endmsg;
} else {
error << string_compose (_("could not create %1 new mixed tracks"), how_many) << endmsg;
}
}
}
@ -1395,7 +1391,18 @@ restart JACK with more ports."), PROGRAM_NAME));
msg.run ();
}
}
void
ARDOUR_UI::session_add_midi_route (bool disk, RouteGroup* route_group, uint32_t how_many, const string& name_template, PluginInfoPtr instrument)
{
ChanCount one_midi_channel;
one_midi_channel.set (DataType::MIDI, 1);
if (disk) {
session_add_mixed_track (one_midi_channel, one_midi_channel, route_group, how_many, name_template, instrument);
}
}
void
ARDOUR_UI::session_add_audio_route (
@ -3120,8 +3127,8 @@ ARDOUR_UI::add_route (Gtk::Window* float_window)
return;
}
uint32_t input_chan = add_route_dialog->channels ();
uint32_t output_chan;
ChanCount input_chan= add_route_dialog->channels ();
ChanCount output_chan;
string name_template = add_route_dialog->name_template ();
PluginInfoPtr instrument = add_route_dialog->requested_instrument ();
RouteGroup* route_group = add_route_dialog->route_group ();
@ -3129,19 +3136,29 @@ ARDOUR_UI::add_route (Gtk::Window* float_window)
AutoConnectOption oac = Config->get_output_auto_connect();
if (oac & AutoConnectMaster) {
output_chan = (_session->master_out() ? _session->master_out()->n_inputs().n_audio() : input_chan);
output_chan.set (DataType::AUDIO, (_session->master_out() ? _session->master_out()->n_inputs().n_audio() : input_chan.n_audio()));
output_chan.set (DataType::MIDI, 0);
} else {
output_chan = input_chan;
}
cerr << "ARD said " << input_chan << " and " << output_chan << endl;
/* XXX do something with name template */
if (add_route_dialog->midi_tracks_wanted()) {
switch (add_route_dialog->type_wanted()) {
case AddRouteDialog::AudioTrack:
session_add_audio_track (input_chan.n_audio(), output_chan.n_audio(), add_route_dialog->mode(), route_group, count, name_template);
break;
case AddRouteDialog::MidiTrack:
session_add_midi_track (route_group, count, name_template, instrument);
} else if (add_route_dialog->audio_tracks_wanted()) {
session_add_audio_track (input_chan, output_chan, add_route_dialog->mode(), route_group, count, name_template);
} else {
session_add_audio_bus (input_chan, output_chan, route_group, count, name_template);
break;
case AddRouteDialog::MixedTrack:
session_add_mixed_track (input_chan, output_chan, route_group, count, name_template, instrument);
break;
case AddRouteDialog::AudioBus:
session_add_audio_bus (input_chan.n_audio(), output_chan.n_audio(), route_group, count, name_template);
break;
}
}