From ea940433ee14640d2782350cc19b9742ee0e8522 Mon Sep 17 00:00:00 2001 From: Werner Schweer Date: Wed, 8 Nov 2006 21:07:52 +0000 Subject: update last updates --- muse/muse/driver/jack.cpp | 3 ++- muse/muse/midififo.cpp | 1 + muse/muse/midiout.cpp | 10 ++++++++++ muse/muse/midiout.h | 1 + muse/muse/miditrack.cpp | 21 ++++++++++++++++----- muse/muse/mixer/astrip.cpp | 35 ++++++++++++++++++++++------------- muse/muse/mixer/mstrip.cpp | 4 ++-- muse/muse/route.cpp | 27 +++++++-------------------- muse/muse/song.cpp | 2 +- muse/muse/track.cpp | 8 ++++---- 10 files changed, 66 insertions(+), 46 deletions(-) diff --git a/muse/muse/driver/jack.cpp b/muse/muse/driver/jack.cpp index 24525d1c..96a2da64 100644 --- a/muse/muse/driver/jack.cpp +++ b/muse/muse/driver/jack.cpp @@ -540,7 +540,8 @@ void exitJackAudio() bool JackAudio::connect(Port src, Port dst) { if (src.isZero() || dst.isZero()) { - fprintf(stderr, "JackAudio::connect(1): unknown jack ports\n"); + fprintf(stderr, "JackAudio::connect(1): unknown jack ports (%d-%d)\n", + src.isZero(), dst.isZero()); return false; } const char* sn = jack_port_name(src.jackPort()); diff --git a/muse/muse/midififo.cpp b/muse/muse/midififo.cpp index 4bb43346..51b6fd3a 100644 --- a/muse/muse/midififo.cpp +++ b/muse/muse/midififo.cpp @@ -33,6 +33,7 @@ bool MidiFifo::put(const MidiEvent& event) q_atomic_increment(&size); return false; } +printf("fifo overflow size %d\n", size); return true; } diff --git a/muse/muse/midiout.cpp b/muse/muse/midiout.cpp index 79928cb7..e4edf5b1 100644 --- a/muse/muse/midiout.cpp +++ b/muse/muse/midiout.cpp @@ -29,6 +29,16 @@ static const unsigned char mmcDeferredPlayMsg[] = { 0x7f, 0x7f, 0x06, 0x03 }; +//--------------------------------------------------------- +// MidiOut +//--------------------------------------------------------- + +MidiOut::MidiOut() + { + track = 0; + _instrument = 0; + } + //--------------------------------------------------------- // sendGmOn // send GM-On message to midi device and keep track diff --git a/muse/muse/midiout.h b/muse/muse/midiout.h index 76835052..d521ff89 100644 --- a/muse/muse/midiout.h +++ b/muse/muse/midiout.h @@ -46,6 +46,7 @@ class MidiOut MidiFifo eventFifo; + MidiOut(); void processMidi(MidiEventList& el, unsigned fromTick, unsigned toTick, unsigned fromFrame, unsigned toFrame); MidiInstrument* instrument() { return _instrument; } 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; } //--------------------------------------------------------- diff --git a/muse/muse/mixer/astrip.cpp b/muse/muse/mixer/astrip.cpp index a7ef5037..4b712674 100644 --- a/muse/muse/mixer/astrip.cpp +++ b/muse/muse/mixer/astrip.cpp @@ -194,15 +194,11 @@ AudioStrip::AudioStrip(Mixer* m, AudioTrack* t, bool align) QHBoxLayout* rBox = new QHBoxLayout(0); - if (track->type() == Track::AUDIO_SOFTSYNTH) { - rBox->addStretch(100); - } - else { - iR = newInRouteButton(); - rBox->addWidget(iR); - connect(iR->menu(), SIGNAL(aboutToShow()), SLOT(iRouteShow())); - connect(iR->menu(), SIGNAL(triggered(QAction*)), song, SLOT(routeChanged(QAction*))); - } + iR = newInRouteButton(); + rBox->addWidget(iR); + connect(iR->menu(), SIGNAL(aboutToShow()), SLOT(iRouteShow())); + connect(iR->menu(), SIGNAL(triggered(QAction*)), song, SLOT(routeChanged(QAction*))); + oR = newOutRouteButton(); rBox->addWidget(oR); connect(oR->menu(), SIGNAL(aboutToShow()), SLOT(oRouteShow())); @@ -579,7 +575,9 @@ static void addSyntiPorts(AudioTrack* t, QMenu* lb, const RouteList& rl) continue; QAction* it = lb->addAction(track->name()); it->setCheckable(true); - Route route = Route(RouteNode(t), RouteNode(track)); + RouteNode a(t); + RouteNode b(track); + Route route = Route(b, a); it->setData(QVariant::fromValue(route)); it->setChecked(rl.indexOf(route) != -1); } @@ -589,6 +587,9 @@ static void addSyntiPorts(AudioTrack* t, QMenu* lb, const RouteList& rl) // iRouteShow //--------------------------------------------------------- +extern void addMidiTracks(QMenu* menu, Track* track, int channel, bool input); +extern void addMidiInPorts(QMenu* menu, Track* dtrack, int channel); + void AudioStrip::iRouteShow() { QMenu* pup = iR->menu(); @@ -607,7 +608,7 @@ void AudioStrip::iRouteShow() foreach (PortName ip, ol) { QAction* id = pup->addAction(ip.name); id->setCheckable(true); - RouteNode src(ip.port, i, RouteNode::AUDIOPORT); + RouteNode src(ip.port, -1, RouteNode::AUDIOPORT); RouteNode dst(t, i, RouteNode::TRACK); Route route = Route(src, dst); id->setData(QVariant::fromValue(route)); @@ -631,6 +632,14 @@ void AudioStrip::iRouteShow() addGroupPorts(t, pup, *irl); addSyntiPorts(t, pup, *irl); break; + case Track::AUDIO_SOFTSYNTH: + pup->addSeparator()->setText(tr("MidiChannel")); + for (int ch = 0; ch < MIDI_CHANNELS; ++ch) { + QMenu* m = pup->addMenu(QString("Channel %1").arg(ch+1)); + addMidiTracks(m, track, ch, true); + addMidiInPorts(m, track, ch); + } + break; } } @@ -659,8 +668,8 @@ void AudioStrip::oRouteShow() foreach (PortName ip, ol) { QAction* action = pup->addAction(ip.name); action->setCheckable(true); - RouteNode src(t); - RouteNode dst(ip.port, i, RouteNode::AUDIOPORT); + RouteNode src(t, i, RouteNode::TRACK); + RouteNode dst(ip.port, -1, RouteNode::AUDIOPORT); Route r = Route(src, dst); action->setData(QVariant::fromValue(r)); action->setChecked(orl->indexOf(r) != -1); diff --git a/muse/muse/mixer/mstrip.cpp b/muse/muse/mixer/mstrip.cpp index 5e728b75..d8f404d6 100644 --- a/muse/muse/mixer/mstrip.cpp +++ b/muse/muse/mixer/mstrip.cpp @@ -42,7 +42,7 @@ enum { KNOB_PAN, KNOB_CHOR_SEND, KNOB_VAR_SEND, KNOB_REV_SEND }; // Note: midi tracks do not have channels //--------------------------------------------------------- -static void addMidiTracks(QMenu* menu, Track* track, int channel, bool input) +void addMidiTracks(QMenu* menu, Track* track, int channel, bool input) { RouteList* rl = input ? track->inRoutes() : track->outRoutes(); RouteNode a(track, channel, RouteNode::TRACK); @@ -64,7 +64,7 @@ static void addMidiTracks(QMenu* menu, Track* track, int channel, bool input) // can only be added to input route lists //--------------------------------------------------------- -static void addMidiInPorts(QMenu* menu, Track* dtrack, int channel) +void addMidiInPorts(QMenu* menu, Track* dtrack, int channel) { RouteList* rl = dtrack->inRoutes(); RouteNode dst(dtrack, channel, RouteNode::TRACK); diff --git a/muse/muse/route.cpp b/muse/muse/route.cpp index 4129b884..953defaf 100644 --- a/muse/muse/route.cpp +++ b/muse/muse/route.cpp @@ -87,7 +87,7 @@ RouteNode::RouteNode(Track* tr, int ch, RouteNodeType t) bool addRoute(const Route& r) { -//printf("addRoute %s.%d:<%s> %s.%d:<%s>\n", +// printf("addRoute %s.%d:<%s> %s.%d:<%s>\n", // r.src.tname(), r.src.channel, r.src.name().toLatin1().data(), // r.dst.tname(), r.dst.channel, r.dst.name().toLatin1().data()); @@ -355,25 +355,12 @@ const char* RouteNode::tname() const void RouteNode::write(Xml& xml, const char* label) const { - switch (type) { - case AUDIOPORT: - case JACKMIDIPORT: - case MIDIPORT: - case AUXPLUGIN: - xml.put("<%s type=\"%s\" name=\"%s\"/>", - label, tname(), name().toUtf8().data()); - break; - case TRACK: - case SYNTIPORT: - if (channel != -1) - xml.put("<%s type=\"%s\" channel=\"%d\" name=\"%s\"/>", - label, tname(), channel + 1, name().toUtf8().data()); - else - xml.put("<%s type=\"%s\" name=\"%s\"/>", - label, tname(), name().toUtf8().data()); - - break; - } + if (channel != -1) + xml.put("<%s type=\"%s\" channel=\"%d\" name=\"%s\"/>", + label, tname(), channel + 1, name().toUtf8().data()); + else + xml.put("<%s type=\"%s\" name=\"%s\"/>", + label, tname(), name().toUtf8().data()); } //--------------------------------------------------------- diff --git a/muse/muse/song.cpp b/muse/muse/song.cpp index f14d4253..6af28976 100644 --- a/muse/muse/song.cpp +++ b/muse/muse/song.cpp @@ -165,7 +165,7 @@ bool Song::addEvent(Event& event, Part* part) CVal val; val.i = event.dataB(); if (!track->addControllerVal(cntrl, tick, val)) { -//TODOA track->addMidiController(track->port()->instrument(), cntrl); + track->addMidiController(track->instrument(), cntrl); if (!track->addControllerVal(cntrl, tick, val)) { return false; } diff --git a/muse/muse/track.cpp b/muse/muse/track.cpp index 2b4f0b79..425b32fb 100644 --- a/muse/muse/track.cpp +++ b/muse/muse/track.cpp @@ -980,7 +980,7 @@ void Track::activate2() r.dst.disconnected = false; } else if (r.dst.type == RouteNode::AUDIOPORT) { - audioDriver->connect(_jackPort[r.dst.channel], r.dst.port); + audioDriver->connect(_jackPort[r.src.channel], r.dst.port); r.dst.disconnected = false; } else if (r.dst.type == RouteNode::MIDIPORT) { @@ -994,7 +994,7 @@ void Track::activate2() r.src.disconnected = false; } else if (r.src.type == RouteNode::AUDIOPORT) { - audioDriver->connect(r.src.port, _jackPort[r.src.channel]); + audioDriver->connect(r.src.port, _jackPort[r.dst.channel]); r.src.disconnected = false; } else if (r.src.type == RouteNode::MIDIPORT) { @@ -1018,7 +1018,7 @@ void Track::deactivate() audioDriver->disconnect(_jackPort[0], r.dst.port); } else if (r.dst.type == RouteNode::AUDIOPORT) { - audioDriver->disconnect(_jackPort[r.dst.channel], r.dst.port); + audioDriver->disconnect(_jackPort[r.src.channel], r.dst.port); r.dst.disconnected = true; } else if (r.dst.type == RouteNode::MIDIPORT) { @@ -1033,7 +1033,7 @@ void Track::deactivate() } else if (r.src.type == RouteNode::AUDIOPORT) { r.src.disconnected = true; - audioDriver->disconnect(r.src.port, _jackPort[r.src.channel]); + audioDriver->disconnect(r.src.port, _jackPort[r.dst.channel]); } else if (r.src.type == RouteNode::MIDIPORT) { r.src.disconnected = true; -- cgit v1.2.3