summaryrefslogtreecommitdiff
path: root/muse/muse/miditrack.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'muse/muse/miditrack.cpp')
-rw-r--r--muse/muse/miditrack.cpp21
1 files changed, 16 insertions, 5 deletions
diff --git a/muse/muse/miditrack.cpp b/muse/muse/miditrack.cpp
index 43c627e1..9cc63c3e 100644
--- a/muse/muse/miditrack.cpp
+++ b/muse/muse/miditrack.cpp
@@ -36,8 +36,10 @@ MidiTrack::MidiTrack()
: MidiTrackBase()
{
init();
- _events = new EventList;
- recordPart = 0;
+ _events = new EventList;
+ recordPart = 0;
+ _drumMap = 0;
+ _useDrumMap = false;
}
MidiTrack::~MidiTrack()
@@ -139,7 +141,11 @@ void MidiTrack::read(QDomNode node)
void MidiTrack::playMidiEvent(MidiEvent* ev)
{
foreach (const Route& r, _outRoutes) {
- ((MidiOutPort*)r.dst.track)->playMidiEvent(ev);
+ Track* track = r.dst.track;
+ if (track->type() == MIDI_OUT)
+ ((MidiOutPort*)track)->playMidiEvent(ev);
+ else if (track->type() == AUDIO_SOFTSYNTH)
+ ((SynthI*)track)->playMidiEvent(ev);
}
}
@@ -480,7 +486,7 @@ void MidiTrack::getEvents(unsigned from, unsigned to, int, MidiEventList* dst)
Part* part = p->second;
if (part->mute())
continue;
- DrumMap* dm = ((MidiTrack*)part->track())->drumMap();
+ DrumMap* dm = drumMap();
unsigned offset = _delay + part->tick();
if (offset > to)
@@ -653,7 +659,12 @@ MidiInstrument* MidiTrack::instrument() const
{
if (_outRoutes.isEmpty())
return genericMidiInstrument;
- return ((MidiOutPort*)_outRoutes[0].dst.track)->instrument();
+ Track* track = _outRoutes[0].dst.track;
+ if (track->type() == MIDI_OUT)
+ return ((MidiOutPort*)track)->instrument();
+ else if (track->type() == AUDIO_SOFTSYNTH)
+ return ((SynthI*)track)->instrument();
+ return 0;
}
//---------------------------------------------------------