diff options
Diffstat (limited to 'muse_qt4_evolution/muse/route.cpp')
-rw-r--r-- | muse_qt4_evolution/muse/route.cpp | 417 |
1 files changed, 0 insertions, 417 deletions
diff --git a/muse_qt4_evolution/muse/route.cpp b/muse_qt4_evolution/muse/route.cpp deleted file mode 100644 index a529eb9c..00000000 --- a/muse_qt4_evolution/muse/route.cpp +++ /dev/null @@ -1,417 +0,0 @@ -//============================================================================= -// MusE -// Linux Music Editor -// $Id:$ -// -// Copyright (C) 2002-2006 by Werner Schweer and others -// -// This program is free software; you can redistribute it and/or modify -// it under the terms of the GNU General Public License version 2. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -//============================================================================= - -#include "song.h" -#include "route.h" -#include "audio.h" -#include "track.h" -#include "synth.h" -#include "audiodev.h" -#include "al/xml.h" -#include "auxplugin.h" - -//--------------------------------------------------------- -// RouteNode -//--------------------------------------------------------- - -RouteNode::RouteNode() - { - track = 0; - channel = -1; - type = TRACK; - } - -RouteNode::RouteNode(Port p, int ch, RouteNodeType t) - { - port = p; - channel = ch; - type = t; - } - -RouteNode::RouteNode(Port p, RouteNodeType t) - { - port = p; - channel = -1; - type = t; - } - -RouteNode::RouteNode(Track* tr) - { - track = tr; - channel = -1; - type = TRACK; - } - -RouteNode::RouteNode(AuxPluginIF* p) - { - plugin = p; - channel = -1; - type = AUXPLUGIN; - } - -RouteNode::RouteNode(Track* tr, int ch, RouteNodeType t) - { - track = tr; - channel = ch; - type = t; - } - -//--------------------------------------------------------- -// addRoute -// return false, if route invalid or cannot be found -//--------------------------------------------------------- - -bool addRoute(const Route& r) - { -// 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()); - - if (r.src.type == RouteNode::AUDIOPORT || r.src.type == RouteNode::JACKMIDIPORT) { - if (r.dst.type != RouteNode::TRACK) { - fprintf(stderr, "addRoute: bad route 1\n"); - return false; - } - if (r.dst.track->type() != Track::AUDIO_INPUT && r.dst.track->type() != Track::MIDI_IN) { - fprintf(stderr, "addRoute: bad route 2\n"); - return false; - } - RouteList* inRoutes = r.dst.track->inRoutes(); - if (inRoutes->indexOf(r) != -1) { - printf(" route already there 1\n"); - return true; - } - inRoutes->push_back(r); - } - else if (r.dst.type == RouteNode::AUDIOPORT || r.dst.type == RouteNode::JACKMIDIPORT) { - if (r.src.type != RouteNode::TRACK) { - fprintf(stderr, "addRoute: bad route 3\n"); - return false; - } - if (r.src.track->type() != Track::AUDIO_OUTPUT && r.src.track->type() != Track::MIDI_OUT) { - fprintf(stderr, "addRoute: bad route 4, tracktype %s\n", r.src.track->cname().toLatin1().data()); - return false; - } - RouteList* outRoutes = r.src.track->outRoutes(); - if (outRoutes->indexOf(r) != -1) { - printf(" route already there 2\n"); - return true; - } - outRoutes->push_back(r); - } - else if (r.src.type == RouteNode::AUXPLUGIN) { - RouteList* inRoutes = r.dst.track->inRoutes(); - inRoutes->insert(inRoutes->begin(), r); - } - else { - if (r.src.track->outRoutes()->indexOf(r) != -1) { - printf(" route already there 3\n"); - return true; - } - r.src.track->outRoutes()->push_back(r); - r.dst.track->inRoutes()->push_back(r); - } - return true; - } - -//--------------------------------------------------------- -// removeRoute -//--------------------------------------------------------- - -void removeRoute(const Route& r) - { -// printf("removeRoute %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()); - if (r.src.type == RouteNode::AUDIOPORT || r.src.type == RouteNode::JACKMIDIPORT) { - if (r.dst.type != RouteNode::TRACK) { - fprintf(stderr, "removeRoute: bad route 1\n"); - goto error; - } - if (r.dst.track->type() != Track::AUDIO_INPUT - && r.dst.track->type() != Track::AUDIO_SOFTSYNTH - && r.dst.track->type() != Track::MIDI_IN) { - fprintf(stderr, "removeRoute: bad route 2\n"); - goto error; - } - RouteList* inRoutes = r.dst.track->inRoutes(); - iRoute i; - for (i = inRoutes->begin(); i != inRoutes->end(); ++i) { - if (*i == r) { - inRoutes->erase(i); - break; - } - } - } - else if (r.dst.type == RouteNode::AUDIOPORT || r.dst.type == RouteNode::JACKMIDIPORT) { - if (r.src.type != RouteNode::TRACK) { - fprintf(stderr, "removeRoute: bad route 3\n"); - goto error; - } - if (r.src.track->type() != Track::AUDIO_OUTPUT && r.src.track->type() != Track::MIDI_OUT) { - fprintf(stderr, "removeRoute: bad route 4\n"); - goto error; - } - RouteList* outRoutes = r.src.track->outRoutes(); - iRoute i; - for (i = outRoutes->begin(); i != outRoutes->end(); ++i) { - if (*i == r) { - outRoutes->erase(i); - break; - } - } - } - else if (r.src.type == RouteNode::AUXPLUGIN) { - if (r.dst.type != RouteNode::TRACK) { - fprintf(stderr, "removeRoute: bad route 5\n"); - goto error; - } - RouteList* inRoutes = r.dst.track->inRoutes(); - for (iRoute i = inRoutes->begin(); i != inRoutes->end(); ++i) { - if (*i == r) { - inRoutes->erase(i); - break; - } - } - } - else { - RouteList* outRoutes = r.src.track->outRoutes(); - for (iRoute i = outRoutes->begin(); i != outRoutes->end(); ++i) { - if (*i == r) { - outRoutes->erase(i); - break; - } - } - RouteList* inRoutes = r.dst.track->inRoutes(); - for (iRoute i = inRoutes->begin(); i != inRoutes->end(); ++i) { - if (*i == r) { - inRoutes->erase(i); - break; - } - } - } - return; -error: - printf("removeRoute %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()); - abort(); - } - -//--------------------------------------------------------- -// track2name -// create string name representation for audio node -//--------------------------------------------------------- - -static QString track2name(const Track* n) - { - return n ? n->name() : "None"; - } - -//--------------------------------------------------------- -// name -// create string name representation for audio node -//--------------------------------------------------------- - -QString RouteNode::name() const - { - switch (type) { - case TRACK: - return track2name(track); - case AUDIOPORT: - case JACKMIDIPORT: - if (port.isZero()) - return QString("0"); - return audioDriver->portName(port); - case AUXPLUGIN: - return plugin->pluginInstance()->name(); - } - return QString("?"); - } - -//--------------------------------------------------------- -// read -//--------------------------------------------------------- - -void Song::readRoute(QDomNode n) - { - RouteNode s, d; - for (QDomNode node = n.firstChild(); !node.isNull(); node = node.nextSibling()) { - QDomElement e = node.toElement(); - if (e.tagName() == "src") - s.read(node); - else if (e.tagName() == "dst") - d.read(node); - else - printf("MusE:readRoute: unknown tag %s\n", e.tagName().toLatin1().data()); - } - if (!s.isValid()) { // source port not found? - printf("Song::readRoute(): invalid source port: %s.%d:<%s> - %s.%d:<%s>\n", - s.tname(), s.channel, s.name().toLatin1().data(), - d.tname(), d.channel, d.name().toLatin1().data()); - return; - } - if (!d.isValid()) { // destination port not found? - printf("Song::readRoute(): invalid destination port: %s.%d:<%s> - %s.%d:<%s>\n", - s.tname(), s.channel, s.name().toLatin1().data(), - d.tname(), d.channel, d.name().toLatin1().data()); - return; - } - Route r(s, d); - r.disconnected = true; - addRoute(r); - } - -//--------------------------------------------------------- -// dump -//--------------------------------------------------------- - -void RouteNode::dump() const - { - printf("RouteNode %p dump: <%s> channel %d, type %s\n", - track, name().toLatin1().data(), channel, tname()); - } - -//--------------------------------------------------------- -// operator== -//--------------------------------------------------------- - -bool RouteNode::operator==(const RouteNode& a) const - { - if (type != a.type) - return false; - switch(type) { - case TRACK: - return (channel == a.channel) && (track == a.track); - case JACKMIDIPORT: - case AUDIOPORT: - return port == a.port; - case AUXPLUGIN: - return plugin == a.plugin; - } - return false; - } - -//--------------------------------------------------------- -// tname -//--------------------------------------------------------- - -const char* RouteNode::tname(RouteNodeType t) - { - static const char* names[] = { - "TRACK", "AUDIOPORT", "JACKMIDIPORT", "AUX" - }; - if (t > (int)(sizeof(names)/sizeof(*names))) - return "???"; - return names[t]; - } - -const char* RouteNode::tname() const - { - return tname(type); - } - -//--------------------------------------------------------- -// write -//--------------------------------------------------------- - -void RouteNode::write(Xml& xml, const char* label) const - { - if (channel != -1) - xml.tagE(QString("%1 type=\"%2\" channel=\"%3\" name=\"%4\"") - .arg(label).arg(tname()).arg(channel + 1).arg(name())); - else - xml.tagE(QString("%1 type=\"%2\" name=\"%3\"") - .arg(label).arg(tname()).arg(name())); - } - -//--------------------------------------------------------- -// read -//--------------------------------------------------------- - -void RouteNode::read(QDomNode node) - { - QDomElement e = node.toElement(); - channel = e.attribute("channel","0").toInt() - 1; - QString s = e.attribute("name"); - QString st = e.attribute("type", "TRACK"); - - if (st == "TRACK") { - type = RouteNode::TRACK; - track = 0; - TrackList* tl = song->tracks(); - for (iTrack i = tl->begin(); i != tl->end(); ++i) { - Track* t = *i; - if (t->name() == s) { - track = t; - break; - } - } - if (track == 0) - printf("Route::read(): track <%s> not found\n", s.toLatin1().data()); - } - else if (st == "AUDIOPORT") { - type = RouteNode::AUDIOPORT; - port = audioDriver->findPort(s); - if (port.isZero()) - printf("Route::read(): audioport <%s> not found\n", s.toLatin1().data()); - } - else if (st == "JACKMIDIPORT") { - type = RouteNode::JACKMIDIPORT; - port = audioDriver->findPort(s); - if (port.isZero()) - printf("Route::read(): jack midiport <%s> not found\n", s.toLatin1().data()); - } - else if (st == "AUX") { - type = RouteNode::AUXPLUGIN; - plugin = 0; - TrackList* tl = song->tracks(); - for (iTrack i = tl->begin(); i != tl->end(); ++i) { - if ((*i)->type() == Track::WAVE || (*i)->type() == Track::AUDIO_INPUT) { - AudioTrack* t = (AudioTrack*)*i; - QList<AuxPluginIF*> pl = t->preAux(); - foreach(AuxPluginIF* p, pl) { - if (p->pluginInstance()->name() == s) { - plugin = p; - break; - } - } - if (plugin) - break; - pl = t->postAux(); - foreach(AuxPluginIF* p, pl) { - if (p->pluginInstance()->name() == s) { - plugin = p; - break; - } - } - if (plugin) - break; - } - } - if (plugin == 0) - printf("Route::read(): plugin <%s> not found\n", s.toLatin1().data()); - } - else { - printf("Route::read(): unknown type <%s>\n", st.toLatin1().data()); - type = RouteNode::TRACK; - } - } - |