summaryrefslogtreecommitdiff
path: root/muse2/muse/song.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'muse2/muse/song.cpp')
-rw-r--r--muse2/muse/song.cpp61
1 files changed, 55 insertions, 6 deletions
diff --git a/muse2/muse/song.cpp b/muse2/muse/song.cpp
index 64287e14..407b8dce 100644
--- a/muse2/muse/song.cpp
+++ b/muse2/muse/song.cpp
@@ -254,6 +254,52 @@ Track* Song::addTrack(int t)
msgInsertTrack(track, -1, true);
insertTrack3(track, -1);
+ // Add default track <-> midiport routes.
+ if(track->isMidiTrack())
+ {
+ MidiTrack* mt = (MidiTrack*)track;
+ int c, cbi, ch;
+ bool defOutFound = false; /// TODO: Remove this when multiple out routes supported.
+ for(int i = 0; i < MIDI_PORTS; ++i)
+ {
+ MidiPort* mp = &midiPorts[i];
+
+ c = mp->defaultInChannels();
+ if(c)
+ {
+ audio->msgAddRoute(Route(i, c), Route(track, c));
+ updateFlags |= SC_ROUTE;
+ }
+
+ if(!defOutFound) ///
+ {
+ c = mp->defaultOutChannels();
+ if(c)
+ {
+
+ /// TODO: Switch when multiple out routes supported.
+ #if 0
+ audio->msgAddRoute(Route(track, c), Route(i, c));
+ updateFlags |= SC_ROUTE;
+ #else
+ for(ch = 0; ch < MIDI_CHANNELS; ++ch)
+ {
+ cbi = 1 << ch;
+ if(c & cbi)
+ {
+ defOutFound = true;
+ mt->setOutPort(i);
+ mt->setOutChannel(ch);
+ updateFlags |= SC_ROUTE;
+ break;
+ }
+ }
+ #endif
+ }
+ }
+ }
+ }
+
//
// add default route to master
//
@@ -261,14 +307,15 @@ Track* Song::addTrack(int t)
if (!ol->empty()) {
AudioOutput* ao = ol->front();
switch(type) {
- case Track::MIDI:
- case Track::DRUM:
- case Track::AUDIO_OUTPUT:
- break;
+ //case Track::MIDI:
+ //case Track::DRUM:
+ //case Track::AUDIO_OUTPUT:
+ // break;
+
case Track::WAVE:
- case Track::AUDIO_GROUP:
+ //case Track::AUDIO_GROUP: // Removed by Tim.
case Track::AUDIO_AUX:
- case Track::AUDIO_INPUT:
+ //case Track::AUDIO_INPUT: // Removed by Tim.
// p3.3.38
//case Track::AUDIO_SOFTSYNTH:
audio->msgAddRoute(Route((AudioTrack*)track, -1), Route(ao, -1));
@@ -279,6 +326,8 @@ Track* Song::addTrack(int t)
audio->msgAddRoute(Route((AudioTrack*)track, 0, ((AudioTrack*)track)->channels()), Route(ao, 0, ((AudioTrack*)track)->channels()));
updateFlags |= SC_ROUTE;
break;
+ default:
+ break;
}
}
audio->msgUpdateSoloStates();