summaryrefslogtreecommitdiff
path: root/gtk2_ardour
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2012-06-22 01:45:16 +0000
committerPaul Davis <paul@linuxaudiosystems.com>2012-06-22 01:45:16 +0000
commitd70429a066dfd33cca0b6f64be7014649a9910ca (patch)
treeb5a1df98535bd30d2485778c699f6d7dd758b649 /gtk2_ardour
parent774e55bcc03139089105a20809d9557d38452486 (diff)
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
Diffstat (limited to 'gtk2_ardour')
-rw-r--r--gtk2_ardour/add_route_dialog.cc107
-rw-r--r--gtk2_ardour/add_route_dialog.h12
-rw-r--r--gtk2_ardour/ardour_ui.cc59
-rw-r--r--gtk2_ardour/ardour_ui.h3
-rw-r--r--gtk2_ardour/editor_audio_import.cc5
5 files changed, 133 insertions, 53 deletions
diff --git a/gtk2_ardour/add_route_dialog.cc b/gtk2_ardour/add_route_dialog.cc
index a3fc0ba730..e267e5496d 100644
--- a/gtk2_ardour/add_route_dialog.cc
+++ b/gtk2_ardour/add_route_dialog.cc
@@ -77,6 +77,7 @@ AddRouteDialog::AddRouteDialog (Session* s)
track_bus_combo.append_text (_("Audio Tracks"));
track_bus_combo.append_text (_("MIDI Tracks"));
+ track_bus_combo.append_text (_("Audio+MIDI Tracks"));
track_bus_combo.append_text (_("Busses"));
track_bus_combo.set_active (0);
@@ -191,6 +192,23 @@ AddRouteDialog::channel_combo_changed ()
refill_track_modes ();
}
+AddRouteDialog::TypeWanted
+AddRouteDialog::type_wanted() const
+{
+ switch (track_bus_combo.get_active_row_number ()) {
+ case 0:
+ return AudioTrack;
+ case 1:
+ return MidiTrack;
+ case 2:
+ return MixedTrack;
+ default:
+ break;
+ }
+
+ return AudioBus;
+}
+
void
AddRouteDialog::maybe_update_name_template_entry ()
{
@@ -198,59 +216,68 @@ AddRouteDialog::maybe_update_name_template_entry ()
name_template_entry.get_text() != "" &&
name_template_entry.get_text() != _("Audio") &&
name_template_entry.get_text() != _("MIDI") &&
+ name_template_entry.get_text() != _("Audio+MIDI") &&
name_template_entry.get_text() != _("Bus")) {
return;
}
- if (audio_tracks_wanted ()) {
+ switch (type_wanted()) {
+ case AudioTrack:
name_template_entry.set_text (_("Audio"));
- } else if (midi_tracks_wanted()) {
+ break;
+ case MidiTrack:
name_template_entry.set_text (_("MIDI"));
- } else {
+ break;
+ case MixedTrack:
+ name_template_entry.set_text (_("Audio+MIDI"));
+ break;
+ case AudioBus:
name_template_entry.set_text (_("Bus"));
+ break;
}
}
void
AddRouteDialog::track_type_chosen ()
{
- if (midi_tracks_wanted()) {
+ switch (type_wanted()) {
+ case AudioTrack:
+ mode_combo.set_sensitive (true);
+ channel_combo.set_sensitive (true);
+ instrument_combo.set_sensitive (false);
+ configuration_label.set_sensitive (true);
+ mode_label.set_sensitive (true);
+ instrument_label.set_sensitive (false);
+ break;
+ case MidiTrack:
channel_combo.set_sensitive (false);
mode_combo.set_sensitive (false);
instrument_combo.set_sensitive (true);
configuration_label.set_sensitive (false);
mode_label.set_sensitive (false);
instrument_label.set_sensitive (true);
- } else if (audio_tracks_wanted()) {
- mode_combo.set_sensitive (true);
+ break;
+ case MixedTrack:
channel_combo.set_sensitive (true);
- instrument_combo.set_sensitive (false);
+ mode_combo.set_sensitive (true);
+ instrument_combo.set_sensitive (true);
configuration_label.set_sensitive (true);
mode_label.set_sensitive (true);
- instrument_label.set_sensitive (false);
- } else {
+ instrument_label.set_sensitive (true);
+ break;
+ case AudioBus:
mode_combo.set_sensitive (false);
channel_combo.set_sensitive (true);
instrument_combo.set_sensitive (false);
configuration_label.set_sensitive (true);
mode_label.set_sensitive (true);
instrument_label.set_sensitive (false);
+ break;
}
maybe_update_name_template_entry ();
}
-bool
-AddRouteDialog::audio_tracks_wanted ()
-{
- return track_bus_combo.get_active_row_number () == 0;
-}
-
-bool
-AddRouteDialog::midi_tracks_wanted ()
-{
- return track_bus_combo.get_active_row_number () == 1;
-}
string
AddRouteDialog::name_template ()
@@ -303,18 +330,42 @@ AddRouteDialog::mode ()
return ARDOUR::Normal;
}
-int
+ChanCount
AddRouteDialog::channels ()
{
- string str = channel_combo.get_active_text();
-
- for (ChannelSetups::iterator i = channel_setups.begin(); i != channel_setups.end(); ++i) {
- if (str == (*i).name) {
- return (*i).channels;
+ ChanCount ret;
+ string str;
+ switch (type_wanted()) {
+ case AudioTrack:
+ case AudioBus:
+ str = channel_combo.get_active_text();
+ for (ChannelSetups::iterator i = channel_setups.begin(); i != channel_setups.end(); ++i) {
+ if (str == (*i).name) {
+ ret.set (DataType::AUDIO, (*i).channels);
+ break;
+ }
+ }
+ ret.set (DataType::MIDI, 0);
+ break;
+
+ case MidiTrack:
+ ret.set (DataType::AUDIO, 0);
+ ret.set (DataType::MIDI, 1);
+ break;
+
+ case MixedTrack:
+ str = channel_combo.get_active_text();
+ for (ChannelSetups::iterator i = channel_setups.begin(); i != channel_setups.end(); ++i) {
+ if (str == (*i).name) {
+ ret.set (DataType::AUDIO, (*i).channels);
+ break;
+ }
}
+ ret.set (DataType::MIDI, 1);
+ break;
}
-
- return 0;
+
+ return ret;
}
string
diff --git a/gtk2_ardour/add_route_dialog.h b/gtk2_ardour/add_route_dialog.h
index a39c1ff8b9..f2e2168f14 100644
--- a/gtk2_ardour/add_route_dialog.h
+++ b/gtk2_ardour/add_route_dialog.h
@@ -48,9 +48,15 @@ class AddRouteDialog : public ArdourDialog
AddRouteDialog (ARDOUR::Session*);
~AddRouteDialog ();
- bool audio_tracks_wanted ();
- bool midi_tracks_wanted ();
- int channels ();
+ enum TypeWanted {
+ AudioTrack,
+ MidiTrack,
+ MixedTrack,
+ AudioBus
+ };
+ TypeWanted type_wanted() const;
+
+ ARDOUR::ChanCount channels ();
int count ();
std::string name_template ();
diff --git a/gtk2_ardour/ardour_ui.cc b/gtk2_ardour/ardour_ui.cc
index e41f712351..b3976f581d 100644
--- a/gtk2_ardour/ardour_ui.cc
+++ b/gtk2_ardour/ardour_ui.cc
@@ -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;
}
}
diff --git a/gtk2_ardour/ardour_ui.h b/gtk2_ardour/ardour_ui.h
index 7b4ffb9f0e..4d6f3391fc 100644
--- a/gtk2_ardour/ardour_ui.h
+++ b/gtk2_ardour/ardour_ui.h
@@ -231,6 +231,9 @@ class ARDOUR_UI : public Gtkmm2ext::UI, public ARDOUR::SessionHandlePtr
session_add_midi_route (true, route_group, how_many, name_template, instrument);
}
+ void session_add_mixed_track (const ARDOUR::ChanCount& input, const ARDOUR::ChanCount& output, ARDOUR::RouteGroup* route_group, uint32_t how_many, std::string const & name_template,
+ ARDOUR::PluginInfoPtr instrument);
+
/*void session_add_midi_bus () {
session_add_midi_route (false);
}*/
diff --git a/gtk2_ardour/editor_audio_import.cc b/gtk2_ardour/editor_audio_import.cc
index 8a7e09df2c..a19084e69d 100644
--- a/gtk2_ardour/editor_audio_import.cc
+++ b/gtk2_ardour/editor_audio_import.cc
@@ -934,7 +934,10 @@ Editor::finish_bringing_in_material (boost::shared_ptr<Region> region, uint32_t
existing_track = at.front();
} else if (mr) {
- list<boost::shared_ptr<MidiTrack> > mt (_session->new_midi_track (boost::shared_ptr<PluginInfo>(), Normal, 0, 1));
+ list<boost::shared_ptr<MidiTrack> > mt (_session->new_midi_track (ChanCount (DataType::MIDI, 1),
+ ChanCount (DataType::MIDI, 1),
+ boost::shared_ptr<PluginInfo>(),
+ Normal, 0, 1));
if (mt.empty()) {
return -1;