summaryrefslogtreecommitdiff
path: root/muse2/muse/node.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'muse2/muse/node.cpp')
-rw-r--r--muse2/muse/node.cpp26
1 files changed, 25 insertions, 1 deletions
diff --git a/muse2/muse/node.cpp b/muse2/muse/node.cpp
index 8db0a3d3..114b03d3 100644
--- a/muse2/muse/node.cpp
+++ b/muse2/muse/node.cpp
@@ -208,9 +208,21 @@ void MidiTrack::updateSoloStates(bool noDec)
if(outPort() >= 0)
{
- MidiDevice *md = midiPorts[outPort()].device();
+ MidiPort* mp = &midiPorts[outPort()];
+ MidiDevice *md = mp->device();
if(md && md->isSynti())
((SynthI*)md)->updateInternalSoloStates();
+
+ // Support Midi Port -> Audio Input solo chains. p4.0.14 Tim.
+ const int chbits = 1 << outChannel();
+ const RouteList* rl = mp->outRoutes();
+ for(ciRoute ir = rl->begin(); ir != rl->end(); ++ir)
+ {
+ if(ir->type == Route::TRACK_ROUTE && ir->track && ir->track->type() == Track::AUDIO_INPUT && (ir->channel & chbits) )
+ {
+ ir->track->updateInternalSoloStates();
+ }
+ }
}
}
@@ -245,6 +257,18 @@ void AudioTrack::updateSoloStates(bool noDec)
{
if(ir->type == Route::TRACK_ROUTE)
ir->track->updateInternalSoloStates();
+ else
+ // Support Midi Port -> Audio Input solo chains. p4.0.14 Tim.
+ if(ir->type == Route::MIDI_PORT_ROUTE)
+ {
+ const MidiTrackList* ml = song->midis();
+ for(ciMidiTrack im = ml->begin(); im != ml->end(); ++im)
+ {
+ MidiTrack* mt = *im;
+ if(mt->outPort() == ir->midiPort && ((1 << mt->outChannel()) & ir->channel) )
+ mt->updateInternalSoloStates();
+ }
+ }
}
}
_tmpSoloChainDoIns = false;