diff options
-rw-r--r-- | muse2/ChangeLog | 7 | ||||
-rw-r--r-- | muse2/awl/posedit.cpp | 2 | ||||
-rw-r--r-- | muse2/muse/CMakeLists.txt | 1 | ||||
-rw-r--r-- | muse2/muse/app.cpp | 280 | ||||
-rw-r--r-- | muse2/muse/app.h | 5 | ||||
-rw-r--r-- | muse2/muse/conf.cpp | 3 | ||||
-rw-r--r-- | muse2/muse/dssihost.cpp | 27 | ||||
-rw-r--r-- | muse2/muse/gconfig.cpp | 3 | ||||
-rw-r--r-- | muse2/muse/gconfig.h | 1 | ||||
-rw-r--r-- | muse2/muse/marker/marker.h | 2 | ||||
-rw-r--r-- | muse2/muse/master/lmaster.cpp | 4 | ||||
-rw-r--r-- | muse2/muse/midiedit/scoreedit.cpp | 80 | ||||
-rw-r--r-- | muse2/muse/midiedit/scoreedit.h | 1 | ||||
-rw-r--r-- | muse2/muse/part.h | 1 | ||||
-rw-r--r-- | muse2/muse/plugin.cpp | 21 | ||||
-rw-r--r-- | muse2/muse/song.cpp | 160 | ||||
-rw-r--r-- | muse2/muse/song.h | 4 | ||||
-rw-r--r-- | muse2/muse/songfile.cpp | 3 | ||||
-rw-r--r-- | muse2/muse/structure.cpp | 368 | ||||
-rw-r--r-- | muse2/muse/undo.cpp | 30 | ||||
-rw-r--r-- | muse2/muse/widgets/genset.cpp | 19 | ||||
-rw-r--r-- | muse2/muse/widgets/gensetbase.ui | 147 | ||||
-rw-r--r-- | muse2/muse/widgets/musewidgetsplug.cpp | 4 | ||||
-rw-r--r-- | muse2/muse/widgets/songinfo.ui | 7 | ||||
-rw-r--r-- | muse2/share/instruments/yam_mo6_v3.idf | 1290 |
25 files changed, 2051 insertions, 419 deletions
diff --git a/muse2/ChangeLog b/muse2/ChangeLog index ab11a07b..a091bf49 100644 --- a/muse2/ChangeLog +++ b/muse2/ChangeLog @@ -1,5 +1,12 @@ +10.05.2011: + - Added general settings audio item: Minimum control process period 1-2048, default 64. Test OK. (Tim) + Adjusts minimum allowable number of samples in a LADSPA or DSSI run, ie control 'smoothness'. + Still TODO: AudioTrack controllers contribution. + - Added Yamaha Mo6 instrument file by Geoff King gsking1 A T gmail D O T com. (Tim) 08.05.2011: - Draw event canvas notes if they extend past part end. (Tim) + - Added checkbox to select if songinfo should be displayed on song start (rj) + - fixups to structure functions, now inserts/cuts markers, and master track events with undo (rj) 06.05.2011: - MusE 2.0beta2 released (rj) - Added Yamaha-CS1x.idf instrument from Ernie Rymer <ethylene77 A T yahoo D O T com> Thanks! (Tim) diff --git a/muse2/awl/posedit.cpp b/muse2/awl/posedit.cpp index e9cddd44..6ca49566 100644 --- a/muse2/awl/posedit.cpp +++ b/muse2/awl/posedit.cpp @@ -433,6 +433,8 @@ QValidator::State PosEdit::validate(QString& s,int& /*i*/) const int tb = AL::sigmap.ticksBeat(_pos.tick()); unsigned tm = AL::sigmap.ticksMeasure(_pos.tick()); + if (tm==0) + return QValidator::Invalid; int bm = tm / tb; validator->setRange(1, 9999); diff --git a/muse2/muse/CMakeLists.txt b/muse2/muse/CMakeLists.txt index 3117cf2f..d9ca7e3c 100644 --- a/muse2/muse/CMakeLists.txt +++ b/muse2/muse/CMakeLists.txt @@ -121,6 +121,7 @@ file (GLOB core_source_files song.cpp songfile.cpp stringparam.cpp + structure.cpp sync.cpp synth.cpp tempo.cpp diff --git a/muse2/muse/app.cpp b/muse2/muse/app.cpp index 7bf171e5..62651cc9 100644 --- a/muse2/muse/app.cpp +++ b/muse2/muse/app.cpp @@ -973,10 +973,10 @@ MusE::MusE(int argc, char** argv) : QMainWindow() editCopyAction = new QAction(QIcon(*editcopyIconSet), tr("&Copy"), this); editPasteAction = new QAction(QIcon(*editpasteIconSet), tr("&Paste"), this); editInsertAction = new QAction(QIcon(*editpasteIconSet), tr("&Insert"), this); + editInsertEMAction = new QAction(QIcon(*editpasteIconSet), tr("&Insert Empty Measure"), this); editPasteCloneAction = new QAction(QIcon(*editpasteCloneIconSet), tr("Paste c&lone"), this); editPaste2TrackAction = new QAction(QIcon(*editpaste2TrackIconSet), tr("Paste to &track"), this); editPasteC2TAction = new QAction(QIcon(*editpasteClone2TrackIconSet), tr("Paste clone to trac&k"), this); - editInsertEMAction = new QAction(QIcon(*editpasteIconSet), tr("&Insert Empty Measure"), this); editDeleteSelectedAction = new QAction(QIcon(*edit_track_delIcon), tr("Delete Selected Tracks"), this); @@ -1122,10 +1122,10 @@ MusE::MusE(int argc, char** argv) : QMainWindow() connect(editCopyAction, SIGNAL(triggered()), editSignalMapper, SLOT(map())); connect(editPasteAction, SIGNAL(triggered()), editSignalMapper, SLOT(map())); connect(editInsertAction, SIGNAL(triggered()), editSignalMapper, SLOT(map())); + connect(editInsertEMAction, SIGNAL(triggered()), editSignalMapper, SLOT(map())); connect(editPasteCloneAction, SIGNAL(triggered()), editSignalMapper, SLOT(map())); connect(editPaste2TrackAction, SIGNAL(triggered()), editSignalMapper, SLOT(map())); connect(editPasteC2TAction, SIGNAL(triggered()), editSignalMapper, SLOT(map())); - connect(editInsertEMAction, SIGNAL(triggered()), editSignalMapper, SLOT(map())); connect(editDeleteSelectedAction, SIGNAL(triggered()), editSignalMapper, SLOT(map())); connect(editSelectAllAction, SIGNAL(triggered()), editSignalMapper, SLOT(map())); @@ -1182,7 +1182,7 @@ MusE::MusE(int argc, char** argv) : QMainWindow() connect(strGlobalCutAction, SIGNAL(activated()), SLOT(globalCut())); connect(strGlobalInsertAction, SIGNAL(activated()), SLOT(globalInsert())); connect(strGlobalSplitAction, SIGNAL(activated()), SLOT(globalSplit())); - connect(strCopyRangeAction, SIGNAL(activated()), SLOT(copyRange())); + connect(strCopyRangeAction, SIGNAL(activated()), SLOT(copyRange())); connect(strCutEventsAction, SIGNAL(activated()), SLOT(cutEvents())); //-------- Midi connections @@ -1356,10 +1356,10 @@ MusE::MusE(int argc, char** argv) : QMainWindow() menuEdit->addAction(editCopyAction); menuEdit->addAction(editPasteAction); menuEdit->addAction(editInsertAction); + menuEdit->addAction(editInsertEMAction); menuEdit->addAction(editPasteCloneAction); menuEdit->addAction(editPaste2TrackAction); menuEdit->addAction(editPasteC2TAction); - menuEdit->addAction(editInsertEMAction); menuEdit->addSeparator(); menuEdit->addAction(editDeleteSelectedAction); @@ -1737,14 +1737,16 @@ void MusE::loadProjectFile(const QString& name, bool songTemplate, bool loadAll) if (restartSequencer) seqStart(); - if (song->getSongInfo().length()>0) - startSongInfo(false); - visTracks->updateVisibleTracksButtons(); progress->setValue(100); delete progress; progress=0; + QApplication::restoreOverrideCursor(); + + if (song->getSongInfo().length()>0 && song->showSongInfoOnStartup()) { + startSongInfo(false); + } } //--------------------------------------------------------- @@ -3377,7 +3379,7 @@ bool MusE::saveAs() return false; } - song->setSongInfo(pci.getSongInfo()); + song->setSongInfo(pci.getSongInfo(), true); name = pci.getProjectPath(); } else { name = getSaveFileName(QString(""), med_file_save_pattern, this, tr("MusE: Save As")); @@ -3669,12 +3671,16 @@ void MusE::startWaveEditor(PartList* pl) void MusE::startSongInfo(bool editable) { SongInfoWidget info; + info.viewCheckBox->setChecked(song->showSongInfoOnStartup()); + info.viewCheckBox->setEnabled(editable); info.songInfoText->setPlainText(song->getSongInfo()); info.songInfoText->setReadOnly(!editable); + info.setModal(true); info.show(); if( info.exec() == QDialog::Accepted) { - if (editable) - song->setSongInfo(info.songInfoText->toPlainText()); + if (editable) { + song->setSongInfo(info.songInfoText->toPlainText(), info.viewCheckBox->isChecked()); + } } } @@ -3690,7 +3696,7 @@ void MusE::showDidYouKnowDialog() dyk.show(); if( dyk.exec()) { if (dyk.dontShowCheckBox->isChecked()) { - printf("disables dialog!\n"); + //printf("disables dialog!\n"); config.showDidYouKnow=false; muse->changeConfig(true); // save settings } @@ -4387,256 +4393,6 @@ void MusE::configShortCuts() changeConfig(true); } -//--------------------------------------------------------- -// globalCut -// - remove area between left and right locator -// - do not touch muted track -// - cut master track -//--------------------------------------------------------- - -void MusE::globalCut() - { - int lpos = song->lpos(); - int rpos = song->rpos(); - if ((lpos - rpos) >= 0) - return; - - song->startUndo(); - TrackList* tracks = song->tracks(); - for (iTrack it = tracks->begin(); it != tracks->end(); ++it) { - MidiTrack* track = dynamic_cast<MidiTrack*>(*it); - if (track == 0 || track->mute()) - continue; - PartList* pl = track->parts(); - for (iPart p = pl->begin(); p != pl->end(); ++p) { - Part* part = p->second; - int t = part->tick(); - int l = part->lenTick(); - if (t + l <= lpos) - continue; - if ((t >= lpos) && ((t+l) <= rpos)) { - audio->msgRemovePart(part, false); - } - else if ((t < lpos) && ((t+l) > lpos) && ((t+l) <= rpos)) { - // remove part tail - int len = lpos - t; - MidiPart* nPart = new MidiPart(*(MidiPart*)part); - nPart->setLenTick(len); - // - // cut Events in nPart - EventList* el = nPart->events(); - iEvent ie = el->lower_bound(t + len); - for (; ie != el->end();) { - iEvent i = ie; - ++ie; - // Indicate no undo, and do not do port controller values and clone parts. - //audio->msgDeleteEvent(i->second, nPart, false); - audio->msgDeleteEvent(i->second, nPart, false, false, false); - } - // Indicate no undo, and do port controller values and clone parts. - //audio->msgChangePart(part, nPart, false); - audio->msgChangePart(part, nPart, false, true, true); - } - else if ((t < lpos) && ((t+l) > lpos) && ((t+l) > rpos)) { - //---------------------- - // remove part middle - //---------------------- - - MidiPart* nPart = new MidiPart(*(MidiPart*)part); - EventList* el = nPart->events(); - iEvent is = el->lower_bound(lpos); - iEvent ie = el->upper_bound(rpos); - for (iEvent i = is; i != ie;) { - iEvent ii = i; - ++i; - // Indicate no undo, and do not do port controller values and clone parts. - //audio->msgDeleteEvent(ii->second, nPart, false); - audio->msgDeleteEvent(ii->second, nPart, false, false, false); - } - - ie = el->lower_bound(rpos); - for (; ie != el->end();) { - iEvent i = ie; - ++ie; - Event event = i->second; - Event nEvent = event.clone(); - nEvent.setTick(nEvent.tick() - (rpos-lpos)); - // Indicate no undo, and do not do port controller values and clone parts. - //audio->msgChangeEvent(event, nEvent, nPart, false); - audio->msgChangeEvent(event, nEvent, nPart, false, false, false); - } - nPart->setLenTick(l - (rpos-lpos)); - // Indicate no undo, and do port controller values and clone parts. - //audio->msgChangePart(part, nPart, false); - audio->msgChangePart(part, nPart, false, true, true); - } - else if ((t >= lpos) && (t < rpos) && (t+l) > rpos) { - // TODO: remove part head - } - else if (t >= rpos) { - MidiPart* nPart = new MidiPart(*(MidiPart*)part); - int nt = part->tick(); - nPart->setTick(nt - (rpos -lpos)); - // Indicate no undo, and do port controller values but not clone parts. - //audio->msgChangePart(part, nPart, false); - audio->msgChangePart(part, nPart, false, true, false); - } - } - } - // TODO: cut tempo track - // TODO: process marker - song->endUndo(SC_TRACK_MODIFIED | SC_PART_MODIFIED | SC_PART_REMOVED); - } - -//--------------------------------------------------------- -// globalInsert -// - insert empty space at left locator position upto -// right locator -// - do not touch muted track -// - insert in master track -//--------------------------------------------------------- - -void MusE::globalInsert() - { - unsigned lpos = song->lpos(); - unsigned rpos = song->rpos(); - if (lpos >= rpos) - return; - - song->startUndo(); - TrackList* tracks = song->tracks(); - for (iTrack it = tracks->begin(); it != tracks->end(); ++it) { - MidiTrack* track = dynamic_cast<MidiTrack*>(*it); - // - // process only non muted midi tracks - // - if (track == 0 || track->mute()) - continue; - PartList* pl = track->parts(); - for (iPart p = pl->begin(); p != pl->end(); ++p) { - Part* part = p->second; - unsigned t = part->tick(); - int l = part->lenTick(); - if (t + l <= lpos) - continue; - if (lpos >= t && lpos < (t+l)) { - MidiPart* nPart = new MidiPart(*(MidiPart*)part); - nPart->setLenTick(l + (rpos-lpos)); - EventList* el = nPart->events(); - - iEvent i = el->end(); - while (i != el->begin()) { - --i; - if (i->first < lpos) - break; - Event event = i->second; - Event nEvent = i->second.clone(); - nEvent.setTick(nEvent.tick() + (rpos-lpos)); - // Indicate no undo, and do not do port controller values and clone parts. - //audio->msgChangeEvent(event, nEvent, nPart, false); - audio->msgChangeEvent(event, nEvent, nPart, false, false, false); - } - // Indicate no undo, and do port controller values and clone parts. - //audio->msgChangePart(part, nPart, false); - audio->msgChangePart(part, nPart, false, true, true); - } - else if (t > lpos) { - MidiPart* nPart = new MidiPart(*(MidiPart*)part); - nPart->setTick(t + (rpos -lpos)); - // Indicate no undo, and do port controller values but not clone parts. - //audio->msgChangePart(part, nPart, false); - audio->msgChangePart(part, nPart, false, true, false); - } - } - } - // TODO: process tempo track - // TODO: process marker - song->endUndo(SC_TRACK_MODIFIED | SC_PART_MODIFIED | SC_PART_REMOVED); - } - -//--------------------------------------------------------- -// globalSplit -// - split all parts at the song position pointer -// - do not touch muted track -//--------------------------------------------------------- - -void MusE::globalSplit() - { - int pos = song->cpos(); - song->startUndo(); - TrackList* tracks = song->tracks(); - for (iTrack it = tracks->begin(); it != tracks->end(); ++it) { - Track* track = *it; - PartList* pl = track->parts(); - for (iPart p = pl->begin(); p != pl->end(); ++p) { - Part* part = p->second; - int p1 = part->tick(); - int l0 = part->lenTick(); - if (pos > p1 && pos < (p1+l0)) { - Part* p1; - Part* p2; - track->splitPart(part, pos, p1, p2); - // Indicate no undo, and do port controller values but not clone parts. - //audio->msgChangePart(part, p1, false); - audio->msgChangePart(part, p1, false, true, false); - audio->msgAddPart(p2, false); - break; - } - } - } - song->endUndo(SC_TRACK_MODIFIED | SC_PART_MODIFIED | SC_PART_INSERTED); - } - -//--------------------------------------------------------- -// copyRange -// - copy space between left and right locator position -// to song position pointer -// - dont process muted tracks -// - create a new part for every track containing the -// copied events -//--------------------------------------------------------- - -void MusE::copyRange() - { - QMessageBox::critical(this, - tr("MusE: Copy Range"), - tr("not implemented") - ); - } - -//--------------------------------------------------------- -// cutEvents -// - make sure that all events in a part end where the -// part ends -// - process only marked parts -//--------------------------------------------------------- - -void MusE::cutEvents() - { - QMessageBox::critical(this, - tr("MusE: Cut Events"), - tr("not implemented") - ); - } - -//--------------------------------------------------------- -// checkRegionNotNull -// return true if (rPos - lPos) <= 0 -//--------------------------------------------------------- - -bool MusE::checkRegionNotNull() - { - int start = song->lPos().frame(); - int end = song->rPos().frame(); - if (end - start <= 0) { - QMessageBox::critical(this, - tr("MusE: Bounce"), - tr("set left/right marker for bounce range") - ); - return true; - } - return false; - } #if 0 //--------------------------------------------------------- @@ -5048,10 +4804,10 @@ void MusE::updateConfiguration() editCopyAction->setShortcut(shortcuts[SHRT_COPY].key); editPasteAction->setShortcut(shortcuts[SHRT_PASTE].key); editInsertAction->setShortcut(shortcuts[SHRT_INSERT].key); + editInsertEMAction->setShortcut(shortcuts[SHRT_INSERTMEAS].key); editPasteCloneAction->setShortcut(shortcuts[SHRT_PASTE_CLONE].key); editPaste2TrackAction->setShortcut(shortcuts[SHRT_PASTE_TO_TRACK].key); editPasteC2TAction->setShortcut(shortcuts[SHRT_PASTE_CLONE_TO_TRACK].key); - editInsertEMAction->setShortcut(shortcuts[SHRT_INSERTMEAS].key); //editDeleteSelectedAction has no acceleration diff --git a/muse2/muse/app.h b/muse2/muse/app.h index 2fd83854..42aebf3b 100644 --- a/muse2/muse/app.h +++ b/muse2/muse/app.h @@ -108,7 +108,7 @@ class MusE : public QMainWindow // Edit Menu actions QAction *editCutAction, *editCopyAction, *editPasteAction, *editInsertAction, *editPasteCloneAction, *editPaste2TrackAction; - QAction *editPasteC2TAction, *editInsertEMAction, *editDeleteSelectedAction, *editSelectAllAction, *editDeselectAllAction; + QAction *editInsertEMAction, *editPasteC2TAction, *editDeleteSelectedAction, *editSelectAllAction, *editDeselectAllAction; QAction *editInvertSelectionAction, *editInsideLoopAction, *editOutsideLoopAction, *editAllPartsAction; QAction *trackMidiAction, *trackDrumAction, *trackWaveAction, *trackAOutputAction, *trackAGroupAction; QAction *trackAInputAction, *trackAAuxAction; @@ -334,6 +334,9 @@ class MusE : public QMainWindow void execDeliveredScript(int); void execUserScript(int); + private: + void adjustGlobalLists(int startPos, int diff); + public slots: bool saveAs(); diff --git a/muse2/muse/conf.cpp b/muse2/muse/conf.cpp index c79c3928..2f391445 100644 --- a/muse2/muse/conf.cpp +++ b/muse2/muse/conf.cpp @@ -923,6 +923,8 @@ void readConfiguration(Xml& xml, bool readOnlySequencer) config.dummyAudioSampleRate = xml.parseInt(); else if (tag == "dummyAudioBufSize") config.dummyAudioBufSize = xml.parseInt(); + else if (tag == "minControlProcessPeriod") + config.minControlProcessPeriod = xml.parseUInt(); else if (tag == "guiRefresh") config.guiRefresh = xml.parseInt(); else if (tag == "userInstrumentsDir") @@ -1182,6 +1184,7 @@ void MusE::writeGlobalConfiguration(int level, Xml& xml) const xml.intTag(level, "vstInPlace", config.vstInPlace); xml.intTag(level, "dummyAudioBufSize", config.dummyAudioBufSize); xml.intTag(level, "dummyAudioSampleRate", config.dummyAudioSampleRate); + xml.uintTag(level, "minControlProcessPeriod", config.minControlProcessPeriod); xml.intTag(level, "guiRefresh", config.guiRefresh); xml.strTag(level, "userInstrumentsDir", config.userInstrumentsDir); diff --git a/muse2/muse/dssihost.cpp b/muse2/muse/dssihost.cpp index cbb908e6..49a63643 100644 --- a/muse2/muse/dssihost.cpp +++ b/muse2/muse/dssihost.cpp @@ -2342,6 +2342,9 @@ iMPEvent DssiSynthIF::getData(MidiPort* /*mp*/, MPEventList* el, iMPEvent i, uns unsigned long sample = 0; int loopcount = 0; // REMOVE Tim. + // To remember the last retrieved value of each AudioTrack controller. + //float prev_ctrl_values[synth->_controlInPorts]; + // NOTE Tested: Variable run-lengths worked superbly for LADSPA and DSSI synths. But DSSI-VST definitely // does NOT like changing sample run length. It crashes the plugin and Wine (but MusE keeps running!). // Furthermore, it resizes the shared memory (mmap, remap) upon each run length DIFFERENT from the last. @@ -2372,11 +2375,15 @@ iMPEvent DssiSynthIF::getData(MidiPort* /*mp*/, MPEventList* el, iMPEvent i, uns if(fixedsize > n) fixedsize = n; + unsigned long min_per = config.minControlProcessPeriod; + if(min_per > n) + min_per = n; + // Process automation control values now. // TODO: This needs to be respect frame resolution. Put this inside the sample loop below. - for(unsigned long k = 0; k < synth->_controlInPorts; ++k) + if(automation && synti && synti->automationType() != AUTO_OFF && id() != -1) { - if(automation && synti && synti->automationType() != AUTO_OFF && id() != -1) + for(unsigned long k = 0; k < synth->_controlInPorts; ++k) { if(controls[k].enCtrl && controls[k].en2Ctrl ) controls[k].val = synti->pluginCtrlVal(genACnum(id(), k)); @@ -2393,7 +2400,7 @@ iMPEvent DssiSynthIF::getData(MidiPort* /*mp*/, MPEventList* el, iMPEvent i, uns unsigned long index = 0; unsigned long evframe; // Get all control ring buffer items valid for this time period... - //for(int m = 0; m < cbsz; ++m) + //for(int m = 0; m < cbsz; ++m) // Doesn't like this. Why? while(!_controlFifo.isEmpty()) { //ControlValue v = _controlFifo.get(); @@ -2424,7 +2431,9 @@ iMPEvent DssiSynthIF::getData(MidiPort* /*mp*/, MPEventList* el, iMPEvent i, uns if(evframe >= n //|| (found && v.frame != frame) //|| (!usefixedrate && found && !v.unique && v.frame != frame) - || (found && !v.unique && evframe != frame) + //|| (found && !v.unique && evframe != frame) + // Not enough requested samples to satisfy minimum setting? Keep going. + || (found && !v.unique && (evframe - sample >= min_per)) // dssi-vst needs them serialized and accounted for, no matter what. This works with fixed rate // because nsamp is constant. But with packets, we need to guarantee at least one-frame spacing. // Although we likely won't be using packets with dssi-vst, so it's OK for now. @@ -2443,6 +2452,16 @@ iMPEvent DssiSynthIF::getData(MidiPort* /*mp*/, MPEventList* el, iMPEvent i, uns controls[v.idx].val = v.value; } + // Process automation control values now. + //if(automation && synti && synti->automationType() != AUTO_OFF && id() != -1) + //{ + // for(unsigned long k = 0; k < synth->_controlInPorts; ++k) + // { + // if(controls[k].enCtrl && controls[k].en2Ctrl ) + // controls[k].val = synti->pluginCtrlVal(genACnum(id(), k)); + // } + //} + //if(found) if(found && !usefixedrate) //nsamp = frame - sample + 1; diff --git a/muse2/muse/gconfig.cpp b/muse2/muse/gconfig.cpp index ee6123ef..4d22ad4c 100644 --- a/muse2/muse/gconfig.cpp +++ b/muse2/muse/gconfig.cpp @@ -167,6 +167,7 @@ GlobalConfigValues config = { 512, // Dummy audio buffer size QString("./"), // projectBaseFolder true, // projectStoreInFolder - true // useProjectSaveDialog + true, // useProjectSaveDialog + 64 // minControlProcessPeriod }; diff --git a/muse2/muse/gconfig.h b/muse2/muse/gconfig.h index 6fb1bb17..cd236b36 100644 --- a/muse2/muse/gconfig.h +++ b/muse2/muse/gconfig.h @@ -142,6 +142,7 @@ struct GlobalConfigValues { QString projectBaseFolder; bool projectStoreInFolder; bool useProjectSaveDialog; + unsigned long minControlProcessPeriod; }; extern GlobalConfigValues config; diff --git a/muse2/muse/marker/marker.h b/muse2/muse/marker/marker.h index f1a587f7..012cce80 100644 --- a/muse2/muse/marker/marker.h +++ b/muse2/muse/marker/marker.h @@ -24,7 +24,7 @@ class Marker : public Pos { bool _current; public: - Marker() : _current(false) {} + Marker() : _name(""),_current(false) {} Marker(const QString& s, bool cur = false) : _name(s), _current(cur) {} void read(Xml&); diff --git a/muse2/muse/master/lmaster.cpp b/muse2/muse/master/lmaster.cpp index 21cadfdd..2f921cdc 100644 --- a/muse2/muse/master/lmaster.cpp +++ b/muse2/muse/master/lmaster.cpp @@ -207,13 +207,17 @@ LMaster::LMaster() updateList(); tempo_editor = new QLineEdit(view->viewport()); + tempo_editor->hide(); connect(tempo_editor, SIGNAL(returnPressed()), SLOT(returnPressed())); sig_editor = new SigEdit(view->viewport()); + sig_editor->hide(); connect(sig_editor, SIGNAL(returnPressed()), SLOT(returnPressed())); pos_editor = new Awl::PosEdit(view->viewport()); + pos_editor->hide(); connect(pos_editor, SIGNAL(returnPressed()), SLOT(returnPressed())); key_editor = new QComboBox(view->viewport()); key_editor->addItems(keyStrs); + key_editor->hide(); connect(key_editor, SIGNAL(currentIndexChanged(int)), SLOT(returnPressed())); connect(view, SIGNAL(currentItemChanged(QTreeWidgetItem*, QTreeWidgetItem*)), SLOT(select(QTreeWidgetItem*, QTreeWidgetItem*))); diff --git a/muse2/muse/midiedit/scoreedit.cpp b/muse2/muse/midiedit/scoreedit.cpp index 2bc87df8..e70e5310 100644 --- a/muse2/muse/midiedit/scoreedit.cpp +++ b/muse2/muse/midiedit/scoreedit.cpp @@ -341,7 +341,7 @@ ScoreEdit::ScoreEdit(QWidget* parent, const char* name, unsigned initPos) menu_mapper->setMapping(func_velocity_action, CMD_VELOCITY); - score_canvas->song_changed(SC_EVENT_INSERTED); + score_canvas->fully_recalculate(); score_canvas->goto_tick(initPos,true); if (name!=NULL) @@ -488,11 +488,10 @@ void ScoreEdit::menu_command(int cmd) } } -//--------------------------------------------------------- -// readPart -//--------------------------------------------------------- -Part* readPart(Xml& xml, QString tag_name="part") //TODO FINDMICH: duplicated from songfile.cpp; only difference: "none" is supported +//duplicated from songfile.cpp's MusE::readPart(); the only differences: +//"none" is supported and tag_name is settable +Part* read_part(Xml& xml, QString tag_name="part") { Part* part = 0; @@ -523,7 +522,7 @@ Part* readPart(Xml& xml, QString tag_name="part") //TODO FINDMICH: duplicated fr break; case Xml::TagStart: - xml.unknown("readPart"); + xml.unknown("read_part"); break; case Xml::TagEnd: @@ -555,7 +554,7 @@ void staff_t::read_status(Xml& xml) clef = clef_t(xml.parseInt()); else if (tag == "part") { - Part* part=readPart(xml); + Part* part=read_part(xml); if (part) parts.insert(part); else @@ -750,7 +749,7 @@ void ScoreEdit::readStatus(Xml& xml) else if (tag == "topwin") TopWin::readStatus(xml); else if (tag == "selectedPart") - score_canvas->set_selected_part(readPart(xml, "selectedPart")); + score_canvas->set_selected_part(read_part(xml, "selectedPart")); else if (tag == "staff") { staff_t staff(score_canvas); @@ -862,7 +861,7 @@ void ScoreCanvas::add_staves(PartList* pl, bool all_in_one) } cleanup_staves(); - song_changed(SC_EVENT_INSERTED); + fully_recalculate(); recalc_staff_pos(); } @@ -1000,7 +999,7 @@ void ScoreCanvas::set_staffmode(list<staff_t>::iterator it, staff_mode_t mode) cerr << "ERROR: ILLEGAL FUNCTION CALL: invalid mode in set_staffmode" << endl; } - song_changed(SC_EVENT_INSERTED); + fully_recalculate(); recalc_staff_pos(); } @@ -1026,7 +1025,7 @@ void ScoreCanvas::remove_staff(list<staff_t>::iterator it) } maybe_close_if_empty(); - song_changed(SC_EVENT_INSERTED); + fully_recalculate(); recalc_staff_pos(); } @@ -1062,7 +1061,7 @@ void ScoreCanvas::merge_staves(list<staff_t>::iterator dest, list<staff_t>::iter remove_staff(src); - song_changed(SC_EVENT_INSERTED); + fully_recalculate(); recalc_staff_pos(); } @@ -1093,7 +1092,7 @@ void ScoreCanvas::move_staff_above(list<staff_t>::iterator dest, list<staff_t>:: staves.splice(dest, staves, src, src_end); - song_changed(SC_EVENT_INSERTED); + fully_recalculate(); recalc_staff_pos(); } @@ -1121,6 +1120,11 @@ set<Part*> ScoreCanvas::get_all_parts() return result; } +void ScoreCanvas::fully_recalculate() +{ + song_changed(SC_EVENT_MODIFIED); +} + void ScoreCanvas::song_changed(int flags) { if (flags & (SC_PART_MODIFIED | @@ -3395,7 +3399,7 @@ void ScoreCanvas::mousePressEvent (QMouseEvent* event) mouse_operation=NO_OP; mouse_x_drag_operation=LENGTH; - song_changed(SC_EVENT_INSERTED); + fully_recalculate(); setMouseTracking(true); dragging=true; @@ -3547,7 +3551,7 @@ void ScoreCanvas::mouseMoveEvent (QMouseEvent* event) audio->msgChangeEvent(dragged_event, tmp, dragged_event_part, false, false, false); dragged_event=tmp; - song_changed(SC_EVENT_INSERTED); + fully_recalculate(); } break; @@ -3590,7 +3594,7 @@ void ScoreCanvas::mouseMoveEvent (QMouseEvent* event) audio->msgChangeEvent(dragged_event, tmp, dragged_event_part, false, false, false); dragged_event=tmp; - song_changed(SC_EVENT_INSERTED); + fully_recalculate(); } break; @@ -3626,7 +3630,7 @@ void ScoreCanvas::mouseMoveEvent (QMouseEvent* event) audio->msgChangeEvent(dragged_event, tmp, dragged_event_part, false, false, false); dragged_event=tmp; - song_changed(SC_EVENT_INSERTED); + fully_recalculate(); } break; @@ -3922,7 +3926,7 @@ void ScoreCanvas::set_quant(int val) set_pixels_per_whole(pixels_per_whole() * quant_len() / old_len ); - song_changed(SC_EVENT_INSERTED); + fully_recalculate(); } else { @@ -4072,6 +4076,7 @@ void staff_t::apply_lasso(QRect rect, set<Event*>& already_processed) } } + //the following assertions are made: // pix_quarter.width() == pix_half.width() @@ -4083,7 +4088,6 @@ void staff_t::apply_lasso(QRect rect, set<Event*>& already_processed) - //hint: recalculating event- and itemlists "from zero" // could happen in realtime, as it is pretty fast. // however, this adds unneccessary cpu usage. @@ -4098,8 +4102,7 @@ void staff_t::apply_lasso(QRect rect, set<Event*>& already_processed) * between, for example, when a cis is tied to a des * * CURRENT TODO - * o let the user select the distance between staves, or do this - * automatically? + * x nothing atm * * IMPORTANT TODO * o add a select-clef-toolbox for tracks @@ -4108,11 +4111,10 @@ void staff_t::apply_lasso(QRect rect, set<Event*>& already_processed) * (0,5 sec) when displaying a whole song in scores * o save toolbar position also in the global window settings * and provide sane defaults + * o support edge-scrolling when opening a lasso * * less important stuff - * o support edge-scrolling when opening a lasso * o deal with expanding parts - * o do all the song_changed(SC_EVENT_INSERTED) properly * o use bars instead of flags over groups of 8ths / 16ths etc * o support different keys in different tracks at the same time * calc_pos_add_list and calc_item_pos will be affected by this @@ -4122,7 +4124,6 @@ void staff_t::apply_lasso(QRect rect, set<Event*>& already_processed) * o save more configuration stuff (quant, color, to_init) * * really unimportant nice-to-haves - * o clean up code (find TODOs) * o support in-song clef-changes * o draw measure numbers * o use timesig_t in all timesig-stuff @@ -4135,7 +4136,7 @@ void staff_t::apply_lasso(QRect rect, set<Event*>& already_processed) * o update translations * o remove ambiguous translation: "offset"="zeitversatz" * this is ambigous in mod. note len and WRONG in mod. velo dialogs - + * * o process accurate timesignatures from muse's list (has to be implemented first in muse) * ( (2+2+3)/4 or (3+2+2)/4 instead of 7/4 ) * o maybe do expanding parts inside the msgChangeEvent or @@ -4149,35 +4150,6 @@ void staff_t::apply_lasso(QRect rect, set<Event*>& already_processed) */ -/* how to use the score editor with multiple tracks - * ================================================ - * - * select parts, right-click, "display in new score window" or "display per-track in new score window" - * or "display in existing window -> 1,2,3,4" or "display per-track in existing..." - * - * ScoreCanvas has a list of note systems, consisting of the following: - * * all parts included in that view - * * eventlist, itemlist - * * used clef, transposing/octave settings - * * enum { NOT_GROUPED, I_AM_TOP, I_AM_BOTTOM } group_state - * NOT_GROUPED means "single note system" - * I_AM_TOP and I_AM_BOTTOM mean that the two systems belong - * together - * - * when redrawing, we iterate through all systems. - * we add a distance according to group_state - * then we draw the system. if group_state is I_AM_BOTTOM, we - * draw our beams longer/higher, and we draw a bracket - * - * when clicking around, we first determine which system has been clicked in - * (the systems have enough space in between, so there won't be notes - * from sys1 in sys2. if there are, they're ignored for simplicity) - * then we proceed as usual (adding, removing, changing notes) - * - * - * pos_add_list stays the same for each staff, so we only need one - */ - /* R O A D M A P * ============= * diff --git a/muse2/muse/midiedit/scoreedit.h b/muse2/muse/midiedit/scoreedit.h index ceb41679..d664f139 100644 --- a/muse2/muse/midiedit/scoreedit.h +++ b/muse2/muse/midiedit/scoreedit.h @@ -690,6 +690,7 @@ class ScoreCanvas : public View void x_scroll_event(int); void y_scroll_event(int); void song_changed(int); + void fully_recalculate(); void goto_tick(int,bool); void pos_changed(int i, unsigned u, bool b); void heartbeat_timer_event(); diff --git a/muse2/muse/part.h b/muse2/muse/part.h index 11ff2fd4..f7a864e5 100644 --- a/muse2/muse/part.h +++ b/muse2/muse/part.h @@ -143,6 +143,7 @@ class WavePart : public Part { //--------------------------------------------------------- typedef std::multimap<int, Part*, std::less<unsigned> >::iterator iPart; +typedef std::multimap<int, Part*, std::less<unsigned> >::reverse_iterator riPart; typedef std::multimap<int, Part*, std::less<unsigned> >::const_iterator ciPart; class PartList : public std::multimap<int, Part*, std::less<unsigned> > { diff --git a/muse2/muse/plugin.cpp b/muse2/muse/plugin.cpp index 76ebeb1b..215a7844 100644 --- a/muse2/muse/plugin.cpp +++ b/muse2/muse/plugin.cpp @@ -2560,6 +2560,9 @@ void PluginI::apply(unsigned long n, unsigned long ports, float** bufIn, float** // } //} + // Grab the control ring buffer size now. + //const int cbsz = _controlFifo.getSize(); + //unsigned endPos = pos + n; //unsigned long frameOffset = audio->getFrameOffset(); unsigned long syncFrame = audio->curSyncFrame(); @@ -2581,12 +2584,16 @@ void PluginI::apply(unsigned long n, unsigned long ports, float** bufIn, float** // so that users can select a small audio period but a larger control period. if(fixedsize > n) fixedsize = n; + + unsigned long min_per = config.minControlProcessPeriod; + if(min_per > n) + min_per = n; // Process automation control values now. // TODO: This needs to be respect frame resolution. Put this inside the sample loop below. - for(unsigned long k = 0; k < controlPorts; ++k) + if(automation && _track && _track->automationType() != AUTO_OFF && _id != -1) { - if(automation && _track && _track->automationType() != AUTO_OFF && _id != -1) + for(unsigned long k = 0; k < controlPorts; ++k) { if(controls[k].enCtrl && controls[k].en2Ctrl ) controls[k].tmpVal = _track->pluginCtrlVal(genACnum(_id, k)); @@ -2603,7 +2610,7 @@ void PluginI::apply(unsigned long n, unsigned long ports, float** bufIn, float** unsigned long index = 0; unsigned long evframe; // Get all control ring buffer items valid for this time period... - //for(int m = 0; m < cbsz; ++m) + //for(int m = 0; m < cbsz; ++m) // Doesn't like this. Why? while(!_controlFifo.isEmpty()) { //ControlValue v = _controlFifo.get(); @@ -2632,7 +2639,9 @@ void PluginI::apply(unsigned long n, unsigned long ports, float** bufIn, float** if(evframe >= n //|| (found && v.frame != frame) //|| (!usefixedrate && found && !v.unique && v.frame != frame) - || (found && !v.unique && evframe != frame) + //|| (found && !v.unique && evframe != frame) + // Not enough requested samples to satisfy minimum setting? Keep going. + || (found && !v.unique && (evframe - sample >= min_per)) // Protection. Observed this condition (dummy audio so far). Why? Supposed to be linear timestamps. //|| (found && evframe < frame) // dssi-vst needs them serialized and accounted for, no matter what. This works with fixed rate @@ -2700,7 +2709,7 @@ void PluginI::apply(unsigned long n, unsigned long ports, float** bufIn, float** //printf("PluginI::apply ports:%lu n:%lu frame:%lu sample:%lu nsamp:%lu syncFrame:%lu loopcount:%d\n", // ports, n, frame, sample, nsamp, syncFrame, loopcount); // REMOVE Tim. - // TODO: TESTING: Don't allow zero-length runs. This could/should be checked in the control loop instead. + // Don't allow zero-length runs. This could/should be checked in the control loop instead. // Note this means it is still possible to get stuck in the top loop (at least for a while). if(nsamp == 0) continue; @@ -2712,7 +2721,7 @@ void PluginI::apply(unsigned long n, unsigned long ports, float** bufIn, float** //fprintf(stderr, "PluginI::apply handle %d\n", i); _plugin->apply(handle[i], nsamp); } - + sample += nsamp; loopcount++; // REMOVE Tim. } diff --git a/muse2/muse/song.cpp b/muse2/muse/song.cpp index cf040348..e6fa9cab 100644 --- a/muse2/muse/song.cpp +++ b/muse2/muse/song.cpp @@ -17,6 +17,8 @@ #include <QPoint> #include <QSignalMapper> #include <QTextStream> +#include <QProcess> +#include <QByteArray> #include "app.h" #include "driver/jackmidi.h" @@ -85,6 +87,7 @@ Song::Song(const char* name) redoList = new UndoList; _markerList = new MarkerList; _globalPitchShift = 0; + showSongInfo=true; clear(false); } @@ -1767,6 +1770,24 @@ Marker* Song::setMarkerLock(Marker* m, bool f) return m; } +// kommer inte att gå göra undo på, kanske skulle fixa det. + +//void Song::moveMarkers(int startOffset, int ticks) +//{ +// iMarker markerI; +// for (markerI=_markerList->rbegin(); markerI != _markerList->rend(); ++markerI) { +// if (markerI->second.tick() > startOffset) { +// if (markerI-> ) +// } +// +// +// +// if (unsigned(t) == markerI->second.tick())//prevent of copmiler warning: comparison signed/unsigned +// return &markerI->second; +// } +// +//} + //--------------------------------------------------------- // setRecordFlag //--------------------------------------------------------- @@ -3696,79 +3717,74 @@ void Song::executeScript(const char* scriptfile, PartList* parts, int quant, boo } fclose(fp); - // Call external program, let it manipulate the file - int pid = fork(); - if (pid == 0) { - if (execlp(scriptfile, scriptfile, tmp, NULL) == -1) { - perror("Failed to launch script!"); - // Get out of here - - // cannot report error through gui, we are in another fork! - //@!TODO: Handle unsuccessful attempts - exit(99); - } - exit(0); - } - else if (pid == -1) { - perror("fork failed"); - } - else { - int status; - waitpid(pid, &status, 0); - if (WEXITSTATUS(status) != 0 ) { - QMessageBox::warning(muse, tr("MusE - external script failed"), - tr("MusE was unable to launch the script\n") - ); - endUndo(SC_EVENT_REMOVED); - return; - } - else { // d0 the fun55or5! - // TODO: Create a new part, update the entire editor from it, hehh.... - - QFile file(tmp); - if ( file.open( QIODevice::ReadOnly ) ) { - QTextStream stream( &file ); - QString line; - while ( !stream.atEnd() ) { - line = stream.readLine(); // line of text excluding '\n' - if (line.startsWith("NOTE")) - { - QStringList sl = line.split(" "); - - Event e(Note); - int tick = sl[1].toInt(); - int pitch = sl[2].toInt(); - int len = sl[3].toInt(); - int velo = sl[4].toInt(); - printf ("tick=%d pitch=%d velo=%d len=%d\n", tick,pitch,velo,len); - e.setTick(tick); - e.setPitch(pitch); - e.setVelo(velo); - e.setLenTick(len); - // Indicate no undo, and do not do port controller values and clone parts. - audio->msgAddEvent(e, part, false, false, false); - } - if (line.startsWith("CONTROLLER")) - { - QStringList sl = line.split(" "); - - Event e(Controller); - int tick = sl[1].toInt(); - int a = sl[2].toInt(); - int b = sl[3].toInt(); - int c = sl[4].toInt(); - printf ("tick=%d a=%d b=%d c=%d\n", tick,a,b,c); - e.setA(a); - e.setB(b); - e.setB(c); - // Indicate no undo, and do not do port controller values and clone parts. - audio->msgAddEvent(e, part, false, false, false); - } - } - file.close(); - } - } +// QString program(scriptfile); + QStringList arguments; + arguments << tmp; + + QProcess *myProcess = new QProcess(muse); + myProcess->start(scriptfile, arguments); + myProcess->waitForFinished(); + QByteArray errStr = myProcess->readAllStandardError(); + if (errStr.size()) { + QMessageBox::warning(muse, tr("MusE - external script failed"), + "Script returned the following error\n"+ QString(errStr)); + endUndo(SC_EVENT_REMOVED); + return; + + } else if (myProcess->exitCode()) { + QMessageBox::warning(muse, tr("MusE - external script failed"), + tr("MusE was unable to launch the script\n") + ); + endUndo(SC_EVENT_REMOVED); + return; } + else { // d0 the fun55or5! + // TODO: Create a new part, update the entire editor from it, hehh.... + + QFile file(tmp); + if ( file.open( QIODevice::ReadOnly ) ) { + QTextStream stream( &file ); + QString line; + while ( !stream.atEnd() ) { + line = stream.readLine(); // line of text excluding '\n' + if (line.startsWith("NOTE")) + { + QStringList sl = line.split(" "); + + Event e(Note); + int tick = sl[1].toInt(); + int pitch = sl[2].toInt(); + int len = sl[3].toInt(); + int velo = sl[4].toInt(); + //printf ("tick=%d pitch=%d velo=%d len=%d\n", tick,pitch,velo,len); + e.setTick(tick); + e.setPitch(pitch); + e.setVelo(velo); + e.setLenTick(len); + // Indicate no undo, and do not do port controller values and clone parts. + audio->msgAddEvent(e, part, false, false, false); + } + if (line.startsWith("CONTROLLER")) + { + QStringList sl = line.split(" "); + + Event e(Controller); + int tick = sl[1].toInt(); + int a = sl[2].toInt(); + int b = sl[3].toInt(); + int c = sl[4].toInt(); + //printf ("tick=%d a=%d b=%d c=%d\n", tick,a,b,c); + e.setA(a); + e.setB(b); + e.setB(c); + // Indicate no undo, and do not do port controller values and clone parts. + audio->msgAddEvent(e, part, false, false, false); + } + } + file.close(); + } + } + remove(tmp); } diff --git a/muse2/muse/song.h b/muse2/muse/song.h index b097a5ee..e1378480 100644 --- a/muse2/muse/song.h +++ b/muse2/muse/song.h @@ -139,6 +139,7 @@ class Song : public QObject { void readMarker(Xml&); QString songInfoStr; // contains user supplied song information, stored in song file. + bool showSongInfo; QStringList deliveredScriptNames; QStringList userScriptNames; @@ -167,7 +168,8 @@ class Song : public QObject { const QFont& font) const; QFont readFont(Xml& xml, const char* name); QString getSongInfo() { return songInfoStr; } - void setSongInfo(QString info) { songInfoStr = info; } + void setSongInfo(QString info, bool show) { songInfoStr = info; showSongInfo = show; } + bool showSongInfoOnStartup() { return showSongInfo; } // If clear_all is false, it will not touch things like midi ports. void clear(bool signal, bool clear_all = true); diff --git a/muse2/muse/songfile.cpp b/muse2/muse/songfile.cpp index 9a577308..a8134b1d 100644 --- a/muse2/muse/songfile.cpp +++ b/muse2/muse/songfile.cpp @@ -1232,6 +1232,8 @@ void Song::read(Xml& xml) setMasterFlag(xml.parseInt()); else if (tag == "info") songInfoStr = xml.parse1(); + else if (tag == "showinfo") + showSongInfo = xml.parseInt(); else if (tag == "loop") setLoop(xml.parseInt()); else if (tag == "punchin") @@ -1437,6 +1439,7 @@ void Song::write(int level, Xml& xml) const { xml.tag(level++, "song"); xml.strTag(level, "info", songInfoStr); + xml.intTag(level, "showinfo", showSongInfo); xml.intTag(level, "automation", automation); xml.intTag(level, "cpos", song->cpos()); xml.intTag(level, "rpos", song->rpos()); diff --git a/muse2/muse/structure.cpp b/muse2/muse/structure.cpp new file mode 100644 index 00000000..f0a4308a --- /dev/null +++ b/muse2/muse/structure.cpp @@ -0,0 +1,368 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: app.cpp,v 1.113.2.68 2009/12/21 14:51:51 spamatica Exp $ +// +// (C) Copyright 1999-2004 Werner Schweer (ws@seh.de) +// (C) Copyright 2011 Robert Jonsson (rj@spamatica.se) +//========================================================= + +#include <qmessagebox.h> +#include "app.h" +#include "track.h" +#include "song.h" +#include "tempo.h" +#include "al/sig.h" +#include "keyevent.h" +#include "audio.h" +#include "marker/marker.h" + + +//--------------------------------------------------------- +// adjustGlobalLists +// helper that adjusts tempo, sig, key and marker +// lists everything from startPos is adjusted +// 'diff' number of ticks. +// function requires undo to be handled outside +//--------------------------------------------------------- + +void MusE::adjustGlobalLists(int startPos, int diff) +{ + const TempoList* t = &tempomap; + const AL::SigList* s = &AL::sigmap; + const KeyList* k = &keymap; + + criTEvent it = t->rbegin(); + AL::criSigEvent is = s->rbegin(); + criKeyEvent ik = k->rbegin(); + + // key + for (; ik != k->rend(); ik++) { + const KeyEvent &ev = (KeyEvent)ik->second; + int tick = ev.tick; + int key = ev.key; + if (tick < startPos ) + break; + + if (tick > startPos && tick +diff < startPos ) { // remove + audio->msgRemoveKey(tick, key, false); + } + else { + audio->msgRemoveKey(tick, key, false); + audio->msgAddKey(tick+diff, key, false); + } + } + + // tempo + for (; it != t->rend(); it++) { + const TEvent* ev = (TEvent*)it->second; + int tick = ev->tick; + int tempo = ev->tempo; + if (tick < startPos ) + break; + + if (tick > startPos && tick +diff < startPos ) { // remove + audio->msgDeleteTempo(tick, tempo, false); + } + else { + audio->msgDeleteTempo(tick, tempo, false); + audio->msgAddTempo(tick+diff, tempo, false); + } + } + + // sig + for (; is != s->rend(); is++) { + const AL::SigEvent* ev = (AL::SigEvent*)is->second; + int tick = ev->tick; + if (tick < startPos ) + break; + + int z = ev->sig.z; + int n = ev->sig.n; + if (tick > startPos && tick +diff < startPos ) { // remove + audio->msgRemoveSig(tick, z, n, false); + } + else { + audio->msgRemoveSig(tick, z, n, false); + audio->msgAddSig(tick+diff, z, n, false); + } + } + + MarkerList *markerlist = song->marker(); + for(iMarker i = markerlist->begin(); i != markerlist->end(); ++i) + { + Marker* m = &i->second; + int tick = m->tick(); + if (tick > startPos) + { + if (tick + diff < startPos ) { // these ticks should be removed + Marker *oldMarker = new Marker(); + *oldMarker = *m; + markerlist->remove(m); + song->undoOp(UndoOp::ModifyMarker,oldMarker, 0); + } else { + Marker *oldMarker = new Marker(); + *oldMarker = *m; + m->setTick(tick + diff); + song->undoOp(UndoOp::ModifyMarker,oldMarker, m); + } + } + } + +} + +//--------------------------------------------------------- +// globalCut +// - remove area between left and right locator +// - do not touch muted track +// - cut master track +//--------------------------------------------------------- + +void MusE::globalCut() + { + int lpos = song->lpos(); + int rpos = song->rpos(); + if ((lpos - rpos) >= 0) + return; + + song->startUndo(); + TrackList* tracks = song->tracks(); + for (iTrack it = tracks->begin(); it != tracks->end(); ++it) { + MidiTrack* track = dynamic_cast<MidiTrack*>(*it); + if (track == 0 || track->mute()) + continue; + PartList* pl = track->parts(); + for (iPart p = pl->begin(); p != pl->end(); ++p) { + Part* part = p->second; + int t = part->tick(); + int l = part->lenTick(); + if (t + l <= lpos) + continue; + if ((t >= lpos) && ((t+l) <= rpos)) { + audio->msgRemovePart(part, false); + } + else if ((t < lpos) && ((t+l) > lpos) && ((t+l) <= rpos)) { + // remove part tail + int len = lpos - t; + MidiPart* nPart = new MidiPart(*(MidiPart*)part); + nPart->setLenTick(len); + // + // cut Events in nPart + EventList* el = nPart->events(); + iEvent ie = el->lower_bound(t + len); + for (; ie != el->end();) { + iEvent i = ie; + ++ie; + // Indicate no undo, and do not do port controller values and clone parts. + //audio->msgDeleteEvent(i->second, nPart, false); + audio->msgDeleteEvent(i->second, nPart, false, false, false); + } + // Indicate no undo, and do port controller values and clone parts. + //audio->msgChangePart(part, nPart, false); + audio->msgChangePart(part, nPart, false, true, true); + } + else if ((t < lpos) && ((t+l) > lpos) && ((t+l) > rpos)) { + //---------------------- + // remove part middle + //---------------------- + + MidiPart* nPart = new MidiPart(*(MidiPart*)part); + EventList* el = nPart->events(); + iEvent is = el->lower_bound(lpos); + iEvent ie = el->upper_bound(rpos); + for (iEvent i = is; i != ie;) { + iEvent ii = i; + ++i; + // Indicate no undo, and do not do port controller values and clone parts. + //audio->msgDeleteEvent(ii->second, nPart, false); + audio->msgDeleteEvent(ii->second, nPart, false, false, false); + } + + ie = el->lower_bound(rpos); + for (; ie != el->end();) { + iEvent i = ie; + ++ie; + Event event = i->second; + Event nEvent = event.clone(); + nEvent.setTick(nEvent.tick() - (rpos-lpos)); + // Indicate no undo, and do not do port controller values and clone parts. + //audio->msgChangeEvent(event, nEvent, nPart, false); + audio->msgChangeEvent(event, nEvent, nPart, false, false, false); + } + nPart->setLenTick(l - (rpos-lpos)); + // Indicate no undo, and do port controller values and clone parts. + //audio->msgChangePart(part, nPart, false); + audio->msgChangePart(part, nPart, false, true, true); + } + else if ((t >= lpos) && (t < rpos) && (t+l) > rpos) { + // TODO: remove part head + } + else if (t >= rpos) { + MidiPart* nPart = new MidiPart(*(MidiPart*)part); + int nt = part->tick(); + nPart->setTick(nt - (rpos -lpos)); + // Indicate no undo, and do port controller values but not clone parts. + //audio->msgChangePart(part, nPart, false); + audio->msgChangePart(part, nPart, false, true, false); + } + } + } + int diff = lpos - rpos; + adjustGlobalLists(lpos, diff); + + song->endUndo(SC_TRACK_MODIFIED | SC_PART_MODIFIED | SC_PART_REMOVED | SC_TEMPO | SC_KEY | SC_SIG); + } + +//--------------------------------------------------------- +// globalInsert +// - insert empty space at left locator position upto +// right locator +// - do not touch muted track +// - insert in master track +//--------------------------------------------------------- + +void MusE::globalInsert() + { + unsigned lpos = song->lpos(); + unsigned rpos = song->rpos(); + if (lpos >= rpos) + return; + + song->startUndo(); + TrackList* tracks = song->tracks(); + for (iTrack it = tracks->begin(); it != tracks->end(); ++it) { + MidiTrack* track = dynamic_cast<MidiTrack*>(*it); + // + // process only non muted midi tracks + // + if (track == 0 || track->mute()) + continue; + PartList* pl = track->parts(); + for (riPart p = pl->rbegin(); p != pl->rend(); ++p) { + Part* part = p->second; + unsigned t = part->tick(); + int l = part->lenTick(); + if (t + l <= lpos) + continue; + if (lpos >= t && lpos < (t+l)) { + MidiPart* nPart = new MidiPart(*(MidiPart*)part); + nPart->setLenTick(l + (rpos-lpos)); + EventList* el = nPart->events(); + + iEvent i = el->end(); + while (i != el->begin()) { + --i; + if (i->first < lpos) + break; + Event event = i->second; + Event nEvent = i->second.clone(); + nEvent.setTick(nEvent.tick() + (rpos-lpos)); + // Indicate no undo, and do not do port controller values and clone parts. + //audio->msgChangeEvent(event, nEvent, nPart, false); + audio->msgChangeEvent(event, nEvent, nPart, false, false, false); + } + // Indicate no undo, and do port controller values and clone parts. + //audio->msgChangePart(part, nPart, false); + audio->msgChangePart(part, nPart, false, true, true); + } + else if (t > lpos) { + MidiPart* nPart = new MidiPart(*(MidiPart*)part); + nPart->setTick(t + (rpos -lpos)); + // Indicate no undo, and do port controller values but not clone parts. + //audio->msgChangePart(part, nPart, false); + audio->msgChangePart(part, nPart, false, true, false); + } + } + } + + int diff = rpos - lpos; + adjustGlobalLists(lpos, diff); + + song->endUndo(SC_TRACK_MODIFIED | SC_PART_MODIFIED | SC_PART_REMOVED | SC_TEMPO | SC_KEY | SC_SIG ); + } + + +//--------------------------------------------------------- +// globalSplit +// - split all parts at the song position pointer +// - do not touch muted track +//--------------------------------------------------------- + +void MusE::globalSplit() + { + int pos = song->cpos(); + song->startUndo(); + TrackList* tracks = song->tracks(); + for (iTrack it = tracks->begin(); it != tracks->end(); ++it) { + Track* track = *it; + PartList* pl = track->parts(); + for (iPart p = pl->begin(); p != pl->end(); ++p) { + Part* part = p->second; + int p1 = part->tick(); + int l0 = part->lenTick(); + if (pos > p1 && pos < (p1+l0)) { + Part* p1; + Part* p2; + track->splitPart(part, pos, p1, p2); + // Indicate no undo, and do port controller values but not clone parts. + //audio->msgChangePart(part, p1, false); + audio->msgChangePart(part, p1, false, true, false); + audio->msgAddPart(p2, false); + break; + } + } + } + song->endUndo(SC_TRACK_MODIFIED | SC_PART_MODIFIED | SC_PART_INSERTED); + } + +//--------------------------------------------------------- +// copyRange +// - copy space between left and right locator position +// to song position pointer +// - dont process muted tracks +// - create a new part for every track containing the +// copied events +//--------------------------------------------------------- + +void MusE::copyRange() + { + QMessageBox::critical(this, + tr("MusE: Copy Range"), + tr("not implemented") + ); + } + +//--------------------------------------------------------- +// cutEvents +// - make sure that all events in a part end where the +// part ends +// - process only marked parts +//--------------------------------------------------------- + +void MusE::cutEvents() + { + QMessageBox::critical(this, + tr("MusE: Cut Events"), + tr("not implemented") + ); + } + +//--------------------------------------------------------- +// checkRegionNotNull +// return true if (rPos - lPos) <= 0 +//--------------------------------------------------------- + +bool MusE::checkRegionNotNull() + { + int start = song->lPos().frame(); + int end = song->rPos().frame(); + if (end - start <= 0) { + QMessageBox::critical(this, + tr("MusE: Bounce"), + tr("set left/right marker for bounce range") + ); + return true; + } + return false; + } + diff --git a/muse2/muse/undo.cpp b/muse2/muse/undo.cpp index 44d37591..a31b8e7a 100644 --- a/muse2/muse/undo.cpp +++ b/muse2/muse/undo.cpp @@ -897,10 +897,18 @@ void Song::doUndo3() break; case UndoOp::ModifyMarker: { - //printf("performing undo for one marker at %d\n", i->realMarker->tick()); - Marker tmpMarker = *i->realMarker; - *i->realMarker = *i->copyMarker; // swap them - *i->copyMarker = tmpMarker; + //printf("performing undo for one marker at copy %d real %d\n", i->copyMarker, i->realMarker); + if (i->realMarker) { + Marker tmpMarker = *i->realMarker; + *i->realMarker = *i->copyMarker; // swap them + *i->copyMarker = tmpMarker; + } + else { + //printf("flipping marker\n"); + i->realMarker = _markerList->add(*i->copyMarker); + delete i->copyMarker; + i->copyMarker = 0; + } } break; default: @@ -979,10 +987,16 @@ void Song::doRedo3() break; case UndoOp::ModifyMarker: { - //printf("performing redo for one marker at %d\n", i->realMarker->tick()); - Marker tmpMarker = *i->realMarker; - *i->realMarker = *i->copyMarker; // swap them - *i->copyMarker = tmpMarker; + //printf("performing redo for one marker at copy %d real %d\n", i->copyMarker, i->realMarker); + if (i->copyMarker) { + Marker tmpMarker = *i->realMarker; + *i->realMarker = *i->copyMarker; // swap them + *i->copyMarker = tmpMarker; + } else { + i->copyMarker = new Marker(*i->realMarker); + _markerList->remove(i->realMarker); + i->realMarker = 0; + } } break; default: diff --git a/muse2/muse/widgets/genset.cpp b/muse2/muse/widgets/genset.cpp index 4a0550bb..edf3cfda 100644 --- a/muse2/muse/widgets/genset.cpp +++ b/muse2/muse/widgets/genset.cpp @@ -28,6 +28,9 @@ static int divisions[] = { static int dummyAudioBufSizes[] = { 16, 32, 64, 128, 256, 512, 1024, 2048 }; +static unsigned long minControlProcessPeriods[] = { + 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048 + }; //--------------------------------------------------------- // GlobalSettingsConfig @@ -66,6 +69,13 @@ GlobalSettingsConfig::GlobalSettingsConfig(QWidget* parent) } } + for (unsigned i = 0; i < sizeof(minControlProcessPeriods)/sizeof(*minControlProcessPeriods); ++i) { + if (minControlProcessPeriods[i] == config.minControlProcessPeriod) { + minControlProcessPeriodComboBox->setCurrentIndex(i); + break; + } + } + userInstrumentsPath->setText(config.userInstrumentsDir); selectInstrumentsDirButton->setIcon(*openIcon); defaultInstrumentsDirButton->setIcon(*undoIcon); @@ -185,6 +195,13 @@ void GlobalSettingsConfig::updateSettings() } } + for (unsigned i = 0; i < sizeof(minControlProcessPeriods)/sizeof(*minControlProcessPeriods); ++i) { + if (minControlProcessPeriods[i] == config.minControlProcessPeriod) { + minControlProcessPeriodComboBox->setCurrentIndex(i); + break; + } + } + guiRefreshSelect->setValue(config.guiRefresh); minSliderSelect->setValue(int(config.minSlider)); minMeterSelect->setValue(config.minMeter); @@ -279,6 +296,8 @@ void GlobalSettingsConfig::apply() int das = dummyAudioSize->currentIndex(); config.dummyAudioBufSize = dummyAudioBufSizes[das]; config.dummyAudioSampleRate = dummyAudioRate->value(); + int mcp = minControlProcessPeriodComboBox->currentIndex(); + config.minControlProcessPeriod = minControlProcessPeriods[mcp]; int div = midiDivisionSelect->currentIndex(); config.division = divisions[div]; diff --git a/muse2/muse/widgets/gensetbase.ui b/muse2/muse/widgets/gensetbase.ui index a48dd3f0..ca4b97f8 100644 --- a/muse2/muse/widgets/gensetbase.ui +++ b/muse2/muse/widgets/gensetbase.ui @@ -6,8 +6,8 @@ <rect> <x>0</x> <y>0</y> - <width>522</width> - <height>528</height> + <width>526</width> + <height>506</height> </rect> </property> <property name="windowTitle"> @@ -550,11 +550,20 @@ <string>Mixer</string> </property> <layout class="QGridLayout"> - <property name="margin"> + <property name="leftMargin"> <number>11</number> </property> + <property name="topMargin"> + <number>2</number> + </property> + <property name="rightMargin"> + <number>11</number> + </property> + <property name="bottomMargin"> + <number>2</number> + </property> <property name="spacing"> - <number>6</number> + <number>2</number> </property> <item row="0" column="1"> <widget class="QSpinBox" name="minSliderSelect"> @@ -617,8 +626,7 @@ <item row="2" column="0"> <widget class="QLabel" name="freewheelLabel"> <property name="text"> - <string>Use Jack freewheel mode if possible. -(Speeds up bounce operations).</string> + <string>Try to use Jack Freewheel</string> </property> <property name="wordWrap"> <bool>false</bool> @@ -634,6 +642,13 @@ </item> <item row="2" column="1"> <widget class="QCheckBox" name="freewheelCheckBox"> + <property name="toolTip"> + <string>Speeds bounce operations</string> + </property> + <property name="whatsThis"> + <string>Use Jack Freewheel mode if possible. +This dramatically speeds bounce operations.</string> + </property> <property name="text"> <string/> </property> @@ -669,8 +684,7 @@ <item row="5" column="0"> <widget class="QLabel" name="vstInPlaceTextLabel"> <property name="text"> - <string>Enable in-place processing for VST plugins. -(Requires restart.)</string> + <string>VST in-place</string> </property> <property name="wordWrap"> <bool>false</bool> @@ -679,14 +693,105 @@ </item> <item row="5" column="1"> <widget class="QCheckBox" name="vstInPlaceCheckBox"> + <property name="toolTip"> + <string>Enable VST in-place processing (restart required)</string> + </property> <property name="whatsThis"> - <string>Turn this off if VST Ladspa effect rack plugins do not work or feedback loudly, even if they are supposed to be in-place capable.</string> + <string>Enable VST in-place processing. Turn this off if + VST Ladspa effect rack plugins do not work or + feedback loudly, even if they are supposed to + be in-place capable. Setting requires a restart.</string> </property> <property name="text"> <string/> </property> </widget> </item> + <item row="6" column="0"> + <widget class="QLabel" name="minControlProcessPeriodLabel"> + <property name="text"> + <string>Minimum control period</string> + </property> + </widget> + </item> + <item row="6" column="1"> + <widget class="QComboBox" name="minControlProcessPeriodComboBox"> + <property name="toolTip"> + <string>Minimum audio controller process period (samples). +</string> + </property> + <property name="whatsThis"> + <string>Minimum audio controller process period (samples). +Adjusts responsiveness of audio controls and + controller graphs. Set a low value for fast, smooth + control. If it causes performance problems, set a + higher value. </string> + </property> + <property name="maxVisibleItems"> + <number>15</number> + </property> + <item> + <property name="text"> + <string>1</string> + </property> + </item> + <item> + <property name="text"> + <string>2</string> + </property> + </item> + <item> + <property name="text"> + <string>4</string> + </property> + </item> + <item> + <property name="text"> + <string>8</string> + </property> + </item> + <item> + <property name="text"> + <string>16</string> + </property> + </item> + <item> + <property name="text"> + <string>32</string> + </property> + </item> + <item> + <property name="text"> + <string>64</string> + </property> + </item> + <item> + <property name="text"> + <string>128</string> + </property> + </item> + <item> + <property name="text"> + <string>256</string> + </property> + </item> + <item> + <property name="text"> + <string>512</string> + </property> + </item> + <item> + <property name="text"> + <string>1024</string> + </property> + </item> + <item> + <property name="text"> + <string>2048</string> + </property> + </item> + </widget> + </item> </layout> </widget> </item> @@ -696,6 +801,15 @@ <string>External Waveditor</string> </property> <layout class="QGridLayout"> + <property name="topMargin"> + <number>2</number> + </property> + <property name="bottomMargin"> + <number>2</number> + </property> + <property name="spacing"> + <number>2</number> + </property> <item row="0" column="0"> <layout class="QGridLayout"> <item row="0" column="0"> @@ -771,6 +885,21 @@ <string>Dummy Audio Driver (settings require restart)</string> </property> <layout class="QGridLayout"> + <property name="leftMargin"> + <number>11</number> + </property> + <property name="topMargin"> + <number>2</number> + </property> + <property name="rightMargin"> + <number>11</number> + </property> + <property name="bottomMargin"> + <number>2</number> + </property> + <property name="spacing"> + <number>2</number> + </property> <item row="0" column="0"> <widget class="QLabel" name="dummyAudioRateLabel"> <property name="text"> diff --git a/muse2/muse/widgets/musewidgetsplug.cpp b/muse2/muse/widgets/musewidgetsplug.cpp index 4b61cf2a..8cb0b57e 100644 --- a/muse2/muse/widgets/musewidgetsplug.cpp +++ b/muse2/muse/widgets/musewidgetsplug.cpp @@ -193,6 +193,10 @@ GlobalConfigValues config = { false, // vstInPlace Enable VST in-place processing 44100, // Dummy audio preferred sample rate 512 // Dummy audio buffer size + QString("./"), // projectBaseFolder + true, // projectStoreInFolder + true, // useProjectSaveDialog + 64 // minControlProcessPeriod }; //--------------------------------------------------------- diff --git a/muse2/muse/widgets/songinfo.ui b/muse2/muse/widgets/songinfo.ui index 0944ce93..c313fd9f 100644 --- a/muse2/muse/widgets/songinfo.ui +++ b/muse2/muse/widgets/songinfo.ui @@ -25,6 +25,13 @@ <item> <layout class="QHBoxLayout"> <item> + <widget class="QCheckBox" name="viewCheckBox"> + <property name="text"> + <string>Show on song load</string> + </property> + </widget> + </item> + <item> <spacer name="spacer1"> <property name="orientation"> <enum>Qt::Horizontal</enum> diff --git a/muse2/share/instruments/yam_mo6_v3.idf b/muse2/share/instruments/yam_mo6_v3.idf new file mode 100644 index 00000000..da3ad8c7 --- /dev/null +++ b/muse2/share/instruments/yam_mo6_v3.idf @@ -0,0 +1,1290 @@ +<?xml version="1.0"?> +<muse version="1.0"> + <MidiInstrument name="Yamaha Mo6 v3"> + <PatchGroup name="GM"> + <Patch name="ConcertGnd" hbank="0" lbank="0" prog="0" /> + <Patch name="Rock Brite" hbank="0" lbank="0" prog="1" /> + <Patch name="CP 2001" hbank="0" lbank="0" prog="2" /> + <Patch name="Honkytonk" hbank="0" lbank="0" prog="3" /> + <Patch name="E.Piano 1" hbank="0" lbank="0" prog="4" /> + <Patch name="E.Piano 2" hbank="0" lbank="0" prog="5" /> + <Patch name="Harpsicord" hbank="0" lbank="0" prog="6" /> + <Patch name="Brite Clav" hbank="0" lbank="0" prog="7" /> + <Patch name="Celeste" hbank="0" lbank="0" prog="8" /> + <Patch name="Glocken" hbank="0" lbank="0" prog="9" /> + <Patch name="Music Box" hbank="0" lbank="0" prog="10" /> + <Patch name="Vibes" hbank="0" lbank="0" prog="11" /> + <Patch name="Marimba" hbank="0" lbank="0" prog="12" /> + <Patch name="Xylophone" hbank="0" lbank="0" prog="13" /> + <Patch name="TubulrBel" hbank="0" lbank="0" prog="14" /> + <Patch name="Dulcimar" hbank="0" lbank="0" prog="15" /> + <Patch name="Draw Organ" hbank="0" lbank="0" prog="16" /> + <Patch name="Perc Organ" hbank="0" lbank="0" prog="17" /> + <Patch name="Rock Organ" hbank="0" lbank="0" prog="18" /> + <Patch name="ChurchOrgn" hbank="0" lbank="0" prog="19" /> + <Patch name="Reed Organ" hbank="0" lbank="0" prog="20" /> + <Patch name="Accordion" hbank="0" lbank="0" prog="21" /> + <Patch name="Harmonica" hbank="0" lbank="0" prog="22" /> + <Patch name="TangoAccrd" hbank="0" lbank="0" prog="23" /> + <Patch name="Velo Nylon" hbank="0" lbank="0" prog="24" /> + <Patch name="Steel" hbank="0" lbank="0" prog="25" /> + <Patch name="ModernJazz" hbank="0" lbank="0" prog="26" /> + <Patch name="Clean Gt" hbank="0" lbank="0" prog="27" /> + <Patch name="Mute" hbank="0" lbank="0" prog="28" /> + <Patch name="Overdrive" hbank="0" lbank="0" prog="29" /> + <Patch name="Distortion" hbank="0" lbank="0" prog="30" /> + <Patch name="Harmonics" hbank="0" lbank="0" prog="31" /> + <Patch name="Acoustic" hbank="0" lbank="0" prog="32" /> + <Patch name="FingerBass" hbank="0" lbank="0" prog="33" /> + <Patch name="PickBass" hbank="0" lbank="0" prog="34" /> + <Patch name="Fretless" hbank="0" lbank="0" prog="35" /> + <Patch name="SimpleSlap" hbank="0" lbank="0" prog="36" /> + <Patch name="FingSlp SW" hbank="0" lbank="0" prog="37" /> + <Patch name="SynthBass1" hbank="0" lbank="0" prog="38" /> + <Patch name="SynthBass2" hbank="0" lbank="0" prog="39" /> + <Patch name="Violin 2" hbank="0" lbank="0" prog="40" /> + <Patch name="Viola 2" hbank="0" lbank="0" prog="41" /> + <Patch name="Cello 2" hbank="0" lbank="0" prog="42" /> + <Patch name="ContraBas2" hbank="0" lbank="0" prog="43" /> + <Patch name="TremoloStr" hbank="0" lbank="0" prog="44" /> + <Patch name="Pizz" hbank="0" lbank="0" prog="45" /> + <Patch name="Harp" hbank="0" lbank="0" prog="46" /> + <Patch name="Tmpni+Cym" hbank="0" lbank="0" prog="47" /> + <Patch name="StereoSt1" hbank="0" lbank="0" prog="48" /> + <Patch name="StereoSt2" hbank="0" lbank="0" prog="49" /> + <Patch name="Grand Saw" hbank="0" lbank="0" prog="50" /> + <Patch name="SynString" hbank="0" lbank="0" prog="51" /> + <Patch name="Aah Choir" hbank="0" lbank="0" prog="52" /> + <Patch name="Ooh Choir" hbank="0" lbank="0" prog="53" /> + <Patch name="Syn Voice" hbank="0" lbank="0" prog="54" /> + <Patch name="Orch.Hit" hbank="0" lbank="0" prog="55" /> + <Patch name="Trumpet" hbank="0" lbank="0" prog="56" /> + <Patch name="Trombone2" hbank="0" lbank="0" prog="57" /> + <Patch name="Tuba" hbank="0" lbank="0" prog="58" /> + <Patch name="MuteTrpt" hbank="0" lbank="0" prog="59" /> + <Patch name="F.Horns" hbank="0" lbank="0" prog="60" /> + <Patch name="Brass Sect" hbank="0" lbank="0" prog="61" /> + <Patch name="SynthBrass" hbank="0" lbank="0" prog="62" /> + <Patch name="SoftBrs GM" hbank="0" lbank="0" prog="63" /> + <Patch name="Soprano" hbank="0" lbank="0" prog="64" /> + <Patch name="Alto Sax" hbank="0" lbank="0" prog="65" /> + <Patch name="TenorSax" hbank="0" lbank="0" prog="66" /> + <Patch name="Bari Sax" hbank="0" lbank="0" prog="67" /> + <Patch name="Oboe" hbank="0" lbank="0" prog="68" /> + <Patch name="Eng.Horn" hbank="0" lbank="0" prog="69" /> + <Patch name="Bassoon" hbank="0" lbank="0" prog="70" /> + <Patch name="Clarinet 2" hbank="0" lbank="0" prog="71" /> + <Patch name="Piccolo" hbank="0" lbank="0" prog="72" /> + <Patch name="Flute" hbank="0" lbank="0" prog="73" /> + <Patch name="Recorder" hbank="0" lbank="0" prog="74" /> + <Patch name="Panflute" hbank="0" lbank="0" prog="75" /> + <Patch name="Bottle" hbank="0" lbank="0" prog="76" /> + <Patch name="Shakuhachi" hbank="0" lbank="0" prog="77" /> + <Patch name="Whistle" hbank="0" lbank="0" prog="78" /> + <Patch name="Ocarina" hbank="0" lbank="0" prog="79" /> + <Patch name="Square Ld" hbank="0" lbank="0" prog="80" /> + <Patch name="Saw Ld" hbank="0" lbank="0" prog="81" /> + <Patch name="Caliop Ld" hbank="0" lbank="0" prog="82" /> + <Patch name="Chiff Ld" hbank="0" lbank="0" prog="83" /> + <Patch name="Charan Ld" hbank="0" lbank="0" prog="84" /> + <Patch name="Voice Ld" hbank="0" lbank="0" prog="85" /> + <Patch name="Fifth Ld" hbank="0" lbank="0" prog="86" /> + <Patch name="BassLd" hbank="0" lbank="0" prog="87" /> + <Patch name="New Age" hbank="0" lbank="0" prog="88" /> + <Patch name="Warm Pad" hbank="0" lbank="0" prog="89" /> + <Patch name="Poly Synth" hbank="0" lbank="0" prog="90" /> + <Patch name="Choir Pad" hbank="0" lbank="0" prog="91" /> + <Patch name="BowedPad" hbank="0" lbank="0" prog="92" /> + <Patch name="Metal Pad" hbank="0" lbank="0" prog="93" /> + <Patch name="Halo Pad" hbank="0" lbank="0" prog="94" /> + <Patch name="Sweep Pad" hbank="0" lbank="0" prog="95" /> + <Patch name="Rain Pad" hbank="0" lbank="0" prog="96" /> + <Patch name="SoundTrack" hbank="0" lbank="0" prog="97" /> + <Patch name="Crystal" hbank="0" lbank="0" prog="98" /> + <Patch name="Atmosphere" hbank="0" lbank="0" prog="99" /> + <Patch name="Brightness" hbank="0" lbank="0" prog="100" /> + <Patch name="Goblin" hbank="0" lbank="0" prog="101" /> + <Patch name="Echoes" hbank="0" lbank="0" prog="102" /> + <Patch name="Sci-Fi" hbank="0" lbank="0" prog="103" /> + <Patch name="Sitar" hbank="0" lbank="0" prog="104" /> + <Patch name="Banjo" hbank="0" lbank="0" prog="105" /> + <Patch name="Shamisen" hbank="0" lbank="0" prog="106" /> + <Patch name="Koto" hbank="0" lbank="0" prog="107" /> + <Patch name="Kalimba" hbank="0" lbank="0" prog="108" /> + <Patch name="Bagpipe" hbank="0" lbank="0" prog="109" /> + <Patch name="Fiddle" hbank="0" lbank="0" prog="110" /> + <Patch name="Shehnai" hbank="0" lbank="0" prog="111" /> + <Patch name="Tinkerbel" hbank="0" lbank="0" prog="112" /> + <Patch name="Agogo" hbank="0" lbank="0" prog="113" /> + <Patch name="Steeldrum" hbank="0" lbank="0" prog="114" /> + <Patch name="Woodblock" hbank="0" lbank="0" prog="115" /> + <Patch name="Taikodrum" hbank="0" lbank="0" prog="116" /> + <Patch name="MelodicTom" hbank="0" lbank="0" prog="117" /> + <Patch name="Synth Drum" hbank="0" lbank="0" prog="118" /> + <Patch name="Rev Cymbal" hbank="0" lbank="0" prog="119" /> + <Patch name="Fret Noise" hbank="0" lbank="0" prog="120" /> + <Patch name="BreathNoiz" hbank="0" lbank="0" prog="121" /> + <Patch name="Seashore" hbank="0" lbank="0" prog="122" /> + <Patch name="Tweet" hbank="0" lbank="0" prog="123" /> + <Patch name="Telephone" hbank="0" lbank="0" prog="124" /> + <Patch name="Helicopter" hbank="0" lbank="0" prog="125" /> + <Patch name="Applause" hbank="0" lbank="0" prog="126" /> + <Patch name="Gunshot" hbank="0" lbank="0" prog="127" /> + + + + </PatchGroup> + + <PatchGroup name="Ap"> + <Patch name="ConcertGnd" hbank="0" lbank="0" prog="0" /> + <Patch name="Full Grand" hbank="63" lbank="0" prog="0" /> + <Patch name="Rock Brite" hbank="0" lbank="0" prog="1" /> + <Patch name="BriteGrand" hbank="63" lbank="0" prog="1" /> + <Patch name="Dark Grand" hbank="63" lbank="0" prog="2" /> + <Patch name="Honkytonk" hbank="0" lbank="0" prog="3" /> + <Patch name="Tacky" hbank="63" lbank="0" prog="3" /> + <Patch name="Full Grand" hbank="63" lbank="9" prog="3" /> + <Patch name="HousePiano" hbank="63" lbank="0" prog="4" /> + <Patch name="Mono Comp" hbank="63" lbank="0" prog="5" /> + <Patch name="1968" hbank="63" lbank="0" prog="6" /> + <Patch name="78rpmPiano" hbank="63" lbank="0" prog="7" /> + <Patch name="Ragtime" hbank="63" lbank="0" prog="8" /> + <Patch name="Tacky" hbank="63" lbank="9" prog="35" /> + <Patch name="Salsalicio" hbank="63" lbank="8" prog="61" /> + <Patch name="Montuno" hbank="63" lbank="8" prog="62" /> + <Patch name="Mutey Arp" hbank="63" lbank="8" prog="63" /> + <Patch name="1FingerRck" hbank="63" lbank="8" prog="64" /> + <Patch name="ClubBackin" hbank="63" lbank="8" prog="65" /> + <Patch name="Mono Comp" hbank="63" lbank="9" prog="67" /> + <Patch name="OnTheWater" hbank="63" lbank="3" prog="84" /> + <Patch name="CP 2001" hbank="0" lbank="0" prog="2" /> + <Patch name="HardCP80" hbank="63" lbank="0" prog="12" /> + <Patch name="HardCP80" hbank="63" lbank="9" prog="105" /> + <Patch name="BalladKey" hbank="63" lbank="0" prog="9" /> + <Patch name="PianoBack" hbank="63" lbank="0" prog="10" /> + <Patch name="Piano-Ooh" hbank="63" lbank="0" prog="11" /> + <Patch name="PianoBack" hbank="63" lbank="9" prog="99" /> + </PatchGroup> + + <PatchGroup name="Ba"> + <Patch name="Acoustic" hbank="0" lbank="0" prog="32" /> + <Patch name="1stJazzBas" hbank="63" lbank="8" prog="51" /> + <Patch name="GroovinArp" hbank="63" lbank="8" prog="52" /> + <Patch name="GroovinBs" hbank="63" lbank="0" prog="95" /> + <Patch name="Mega Acous" hbank="63" lbank="0" prog="96" /> + <Patch name="Mega Pick" hbank="63" lbank="9" prog="20" /> + <Patch name="FingerBass" hbank="0" lbank="0" prog="33" /> + <Patch name="PickBass" hbank="0" lbank="0" prog="34" /> + <Patch name="Fretless" hbank="0" lbank="0" prog="35" /> + <Patch name="SimpleSlap" hbank="0" lbank="0" prog="36" /> + <Patch name="FingSlp SW" hbank="0" lbank="0" prog="37" /> + <Patch name="Mega Slap" hbank="63" lbank="9" prog="52" /> + <Patch name="FunkFinger" hbank="63" lbank="8" prog="53" /> + <Patch name="Basman12/8" hbank="63" lbank="8" prog="54" /> + <Patch name="Slapper" hbank="63" lbank="8" prog="55" /> + <Patch name="No Frettin" hbank="63" lbank="8" prog="56" /> + <Patch name="PickedBass" hbank="63" lbank="8" prog="57" /> + <Patch name="Buzzy Pick" hbank="63" lbank="8" prog="58" /> + <Patch name="MellowBass" hbank="63" lbank="8" prog="59" /> + <Patch name="FingerComp" hbank="63" lbank="8" prog="60" /> + <Patch name="MidRngFngr" hbank="63" lbank="9" prog="84" /> + <Patch name="FingerPBs" hbank="63" lbank="0" prog="97" /> + <Patch name="PrecFW" hbank="63" lbank="0" prog="98" /> + <Patch name="RoundWound" hbank="63" lbank="0" prog="99" /> + <Patch name="FretBuzzy" hbank="63" lbank="0" prog="100" /> + <Patch name="S-VeeTee" hbank="63" lbank="0" prog="101" /> + <Patch name="MidRngFngr" hbank="63" lbank="0" prog="102" /> + <Patch name="FingBsAmp" hbank="63" lbank="0" prog="103" /> + <Patch name="PBasFngDst" hbank="63" lbank="0" prog="104" /> + <Patch name="MegaFngHrm" hbank="63" lbank="0" prog="105" /> + <Patch name="Velo Bass" hbank="63" lbank="0" prog="106" /> + <Patch name="Mega Slap" hbank="63" lbank="0" prog="107" /> + <Patch name="PickOpen" hbank="63" lbank="0" prog="108" /> + <Patch name="PickMuteDr" hbank="63" lbank="0" prog="109" /> + <Patch name="Mega Pick" hbank="63" lbank="0" prog="110" /> + <Patch name="FretlsSolo" hbank="63" lbank="0" prog="111" /> + <Patch name="Mega Frtls" hbank="63" lbank="0" prog="112" /> + <Patch name="PBasFngDst" hbank="63" lbank="9" prog="116" /> + <Patch name="SimpleBass" hbank="63" lbank="2" prog="3" /> + <Patch name="Fat Sine" hbank="63" lbank="2" prog="4" /> + <Patch name="Dark Bass" hbank="63" lbank="2" prog="5" /> + <Patch name="OneVoice" hbank="63" lbank="2" prog="6" /> + <Patch name="RnBass" hbank="63" lbank="2" prog="7" /> + <Patch name="Fundamentl" hbank="63" lbank="2" prog="8" /> + <Patch name="SingleOsc" hbank="63" lbank="2" prog="9" /> + <Patch name="SimpleReso" hbank="63" lbank="2" prog="10" /> + <Patch name="101 Bass" hbank="63" lbank="9" prog="10" /> + <Patch name="Unison" hbank="63" lbank="2" prog="11" /> + <Patch name="Moonbass" hbank="63" lbank="2" prog="12" /> + <Patch name="Long Spit" hbank="63" lbank="2" prog="13" /> + <Patch name="Sweeper" hbank="63" lbank="2" prog="14" /> + <Patch name="Bass-Comp!" hbank="63" lbank="2" prog="15" /> + <Patch name="Short PWM" hbank="63" lbank="2" prog="16" /> + <Patch name="Lately" hbank="63" lbank="2" prog="17" /> + <Patch name="Boogie A" hbank="63" lbank="2" prog="18" /> + <Patch name="Dry Syn" hbank="63" lbank="2" prog="19" /> + <Patch name="NeedleBs" hbank="63" lbank="2" prog="20" /> + <Patch name="Wazzo" hbank="63" lbank="2" prog="21" /> + </PatchGroup> + + <PatchGroup name="Br"> + <Patch name="VeloMaster" hbank="63" lbank="2" prog="22" /> + <Patch name="Dark Bass" hbank="63" lbank="9" prog="26" /> + <Patch name="SynthBass1" hbank="0" lbank="0" prog="38" /> + <Patch name="SynthBass2" hbank="0" lbank="0" prog="39" /> + <Patch name="Oxide" hbank="63" lbank="9" prog="42" /> + <Patch name="101 Bass" hbank="63" lbank="3" prog="54" /> + <Patch name="Growler" hbank="63" lbank="3" prog="55" /> + <Patch name="MonsterBas" hbank="63" lbank="3" prog="56" /> + <Patch name="Biting" hbank="63" lbank="3" prog="57" /> + <Patch name="Pulse Stop" hbank="63" lbank="3" prog="58" /> + <Patch name="Biting" hbank="63" lbank="9" prog="58" /> + <Patch name="TackyPulse" hbank="63" lbank="3" prog="59" /> + <Patch name="BigBass" hbank="63" lbank="3" prog="60" /> + <Patch name="Acid Bass" hbank="63" lbank="3" prog="61" /> + <Patch name="Crush Bass" hbank="63" lbank="3" prog="62" /> + <Patch name="Komprssr" hbank="63" lbank="3" prog="63" /> + <Patch name="Competitor" hbank="63" lbank="3" prog="64" /> + <Patch name="Boogie A" hbank="63" lbank="9" prog="74" /> + <Patch name="Fast PWM" hbank="63" lbank="2" prog="78" /> + <Patch name="BassPedal" hbank="63" lbank="2" prog="79" /> + <Patch name="Hypervelo" hbank="63" lbank="2" prog="80" /> + <Patch name="NoiseBass" hbank="63" lbank="2" prog="81" /> + <Patch name="Alias Bass" hbank="63" lbank="2" prog="82" /> + <Patch name="Pulse Step" hbank="63" lbank="2" prog="83" /> + <Patch name="Acidd" hbank="63" lbank="2" prog="84" /> + <Patch name="Moonbass" hbank="63" lbank="9" prog="90" /> + <Patch name="Pulse Step" hbank="63" lbank="9" prog="106" /> + <Patch name="Fast PWM" hbank="63" lbank="9" prog="109" /> + <Patch name="Oxide" hbank="63" lbank="2" prog="114" /> + <Patch name="DistortoBa" hbank="63" lbank="2" prog="115" /> + <Patch name="Dee Tune" hbank="63" lbank="2" prog="116" /> + <Patch name="Wazzo" hbank="63" lbank="9" prog="122" /> + <Patch name="BoneSectn" hbank="63" lbank="1" prog="24" /> + <Patch name="FrHornSect" hbank="63" lbank="1" prog="26" /> + <Patch name="Symphony" hbank="63" lbank="1" prog="27" /> + <Patch name="SlowAttack" hbank="63" lbank="1" prog="28" /> + <Patch name="Fanfare" hbank="63" lbank="1" prog="29" /> + <Patch name="Big-Brite" hbank="63" lbank="1" prog="30" /> + <Patch name="VeloFalls" hbank="63" lbank="1" prog="31" /> + <Patch name="Sforzando" hbank="63" lbank="1" prog="32" /> + <Patch name="Big Band" hbank="63" lbank="1" prog="33" /> + <Patch name="SaxBigBand" hbank="63" lbank="1" prog="34" /> + <Patch name="Hybrid" hbank="63" lbank="1" prog="35" /> + <Patch name="Symphony" hbank="63" lbank="9" prog="39" /> + <Patch name="F.Horns" hbank="0" lbank="0" prog="60" /> + <Patch name="Brass Sect" hbank="0" lbank="0" prog="61" /> + <Patch name="VeloFalls" hbank="63" lbank="9" prog="71" /> + <Patch name="Quiet Orch" hbank="63" lbank="8" prog="76" /> + <Patch name="Funk Bros" hbank="63" lbank="8" prog="77" /> + <Patch name="Fall Arp" hbank="63" lbank="8" prog="78" /> + <Patch name="Hybrid" hbank="63" lbank="9" prog="103" /> + <Patch name="DynoTrumpt" hbank="63" lbank="1" prog="19" /> + <Patch name="SoftJazzTp" hbank="63" lbank="1" prog="20" /> + <Patch name="Phase Mute" hbank="63" lbank="1" prog="21" /> + <Patch name="Fluegel" hbank="63" lbank="1" prog="22" /> + <Patch name="Trombone1" hbank="63" lbank="1" prog="23" /> + <Patch name="FrenchHorn" hbank="63" lbank="1" prog="25" /> + <Patch name="Trumpet" hbank="0" lbank="0" prog="56" /> + <Patch name="Trombone2" hbank="0" lbank="0" prog="57" /> + <Patch name="Tuba" hbank="0" lbank="0" prog="58" /> + <Patch name="MuteTrpt" hbank="0" lbank="0" prog="59" /> + <Patch name="CS-90" hbank="63" lbank="1" prog="36" /> + <Patch name="FM Brass" hbank="63" lbank="1" prog="37" /> + <Patch name="Thinth" hbank="63" lbank="1" prog="38" /> + <Patch name="ObStuff" hbank="63" lbank="1" prog="39" /> + <Patch name="OberBrass" hbank="63" lbank="1" prog="40" /> + <Patch name="OberHorns" hbank="63" lbank="1" prog="41" /> + <Patch name="T Brass" hbank="63" lbank="1" prog="42" /> + <Patch name="BigSquish" hbank="63" lbank="1" prog="43" /> + <Patch name="Soft 5th" hbank="63" lbank="1" prog="44" /> + <Patch name="After 1984" hbank="63" lbank="1" prog="45" /> + <Patch name="SynthBrass" hbank="0" lbank="0" prog="62" /> + <Patch name="SoftBrs GM" hbank="0" lbank="0" prog="63" /> + </PatchGroup> + + <PatchGroup name="Co"> + <Patch name="XDance" hbank="63" lbank="2" prog="67" /> + <Patch name="OnTheVerge" hbank="63" lbank="3" prog="0" /> + <Patch name="The Hunter" hbank="63" lbank="8" prog="0" /> + <Patch name="EleXon MW" hbank="63" lbank="3" prog="1" /> + <Patch name="Bassn Pad" hbank="63" lbank="8" prog="1" /> + <Patch name="Stuttrtron" hbank="63" lbank="9" prog="1" /> + <Patch name="Stuttrtron" hbank="63" lbank="3" prog="2" /> + <Patch name="Surprise" hbank="63" lbank="8" prog="2" /> + <Patch name="Alaska" hbank="63" lbank="3" prog="3" /> + <Patch name="Quo Vadis" hbank="63" lbank="8" prog="3" /> + <Patch name="Bros-Sist" hbank="63" lbank="3" prog="4" /> + <Patch name="Metal Arp" hbank="63" lbank="8" prog="4" /> + <Patch name="ChillDown" hbank="63" lbank="3" prog="5" /> + <Patch name="TransmittR" hbank="63" lbank="8" prog="5" /> + <Patch name="Champ Arp" hbank="63" lbank="3" prog="6" /> + <Patch name="Pistachio" hbank="63" lbank="8" prog="6" /> + <Patch name="NeedlzVlSw" hbank="63" lbank="3" prog="7" /> + <Patch name="X-Wave" hbank="63" lbank="8" prog="7" /> + <Patch name="Das Sneak" hbank="63" lbank="3" prog="8" /> + <Patch name="Cherry" hbank="63" lbank="8" prog="8" /> + <Patch name="Ibizagruv" hbank="63" lbank="3" prog="9" /> + <Patch name="Elec Drum" hbank="63" lbank="8" prog="9" /> + <Patch name="Droid" hbank="63" lbank="3" prog="10" /> + <Patch name="SimpleSize" hbank="63" lbank="8" prog="10" /> + <Patch name="SQ02 Wheel" hbank="63" lbank="3" prog="11" /> + </PatchGroup> + + <PatchGroup name="Cp"> + <Patch name="Straighter" hbank="63" lbank="8" prog="11" /> + <Patch name="Tamburiza" hbank="63" lbank="3" prog="12" /> + <Patch name="BollogPuls" hbank="63" lbank="8" prog="12" /> + <Patch name="AiryChill" hbank="63" lbank="3" prog="13" /> + <Patch name="Strawberry" hbank="63" lbank="8" prog="13" /> + <Patch name="Inverted" hbank="63" lbank="3" prog="14" /> + <Patch name="Ghana Rain" hbank="63" lbank="8" prog="14" /> + <Patch name="Pizza No.1" hbank="63" lbank="3" prog="15" /> + <Patch name="Elc.Music" hbank="63" lbank="8" prog="15" /> + <Patch name="WorkerAnt" hbank="63" lbank="3" prog="16" /> + <Patch name="XtremeHarp" hbank="63" lbank="3" prog="17" /> + <Patch name="Rap Top" hbank="63" lbank="8" prog="17" /> + <Patch name="Electronix" hbank="63" lbank="9" prog="17" /> + <Patch name="i-Vox" hbank="63" lbank="3" prog="18" /> + <Patch name="Zippet" hbank="63" lbank="3" prog="19" /> + <Patch name="Embassy" hbank="63" lbank="8" prog="19" /> + <Patch name="Electronix" hbank="63" lbank="3" prog="20" /> + <Patch name="Basic Arp" hbank="63" lbank="8" prog="20" /> + <Patch name="Sensual" hbank="63" lbank="3" prog="21" /> + <Patch name="Mr. Groovy" hbank="63" lbank="8" prog="21" /> + <Patch name="Valvolex" hbank="63" lbank="3" prog="22" /> + <Patch name="SyncArp 1" hbank="63" lbank="8" prog="22" /> + <Patch name="SimpleArp" hbank="63" lbank="3" prog="23" /> + <Patch name="80s Ens" hbank="63" lbank="8" prog="23" /> + <Patch name="TekkNow MW" hbank="63" lbank="3" prog="24" /> + <Patch name="SyncArp 2" hbank="63" lbank="8" prog="24" /> + <Patch name="Traxxx" hbank="63" lbank="3" prog="25" /> + <Patch name="Magician" hbank="63" lbank="8" prog="25" /> + <Patch name="Voodoo Key" hbank="63" lbank="3" prog="26" /> + <Patch name="ANbasicARP" hbank="63" lbank="8" prog="26" /> + <Patch name="Oztralian" hbank="63" lbank="3" prog="27" /> + <Patch name="Particle" hbank="63" lbank="8" prog="27" /> + <Patch name="Polarized" hbank="63" lbank="3" prog="28" /> + <Patch name="FuzzMorf" hbank="63" lbank="8" prog="28" /> + <Patch name="LighTek" hbank="63" lbank="8" prog="29" /> + <Patch name="Creme Cafe" hbank="63" lbank="8" prog="30" /> + <Patch name="Ibizagruv" hbank="63" lbank="9" prog="30" /> + <Patch name="Jitter" hbank="63" lbank="8" prog="31" /> + <Patch name="NeedlzVlSw" hbank="63" lbank="9" prog="33" /> + <Patch name="Bros-Sist" hbank="63" lbank="9" prog="49" /> + <Patch name="FreshCut" hbank="63" lbank="9" prog="59" /> + <Patch name="Aggressor" hbank="63" lbank="2" prog="60" /> + <Patch name="British" hbank="63" lbank="2" prog="61" /> + <Patch name="Wavepanner" hbank="63" lbank="2" prog="62" /> + <Patch name="Pounder" hbank="63" lbank="2" prog="63" /> + <Patch name="FreshCut" hbank="63" lbank="2" prog="64" /> + <Patch name="Zhuffle" hbank="63" lbank="2" prog="65" /> + <Patch name="Tamburiza" hbank="63" lbank="9" prog="65" /> + <Patch name="Vanilla" hbank="63" lbank="2" prog="66" /> + <Patch name="HeavenSent" hbank="63" lbank="8" prog="75" /> + <Patch name="Alaska" hbank="63" lbank="9" prog="81" /> + <Patch name="Sunny" hbank="63" lbank="8" prog="84" /> + <Patch name="Afro" hbank="63" lbank="8" prog="85" /> + <Patch name="Ethnology" hbank="63" lbank="8" prog="86" /> + <Patch name="Afro" hbank="63" lbank="9" prog="86" /> + <Patch name="Punchy Saw" hbank="63" lbank="8" prog="89" /> + <Patch name="StarDrop" hbank="63" lbank="8" prog="90" /> + <Patch name="Madhouse" hbank="63" lbank="8" prog="91" /> + <Patch name="EuroKidz" hbank="63" lbank="9" prog="91" /> + <Patch name="CompingPd" hbank="63" lbank="8" prog="92" /> + <Patch name="Multi Mod" hbank="63" lbank="8" prog="93" /> + <Patch name="Chinese" hbank="63" lbank="8" prog="94" /> + <Patch name="Neptune" hbank="63" lbank="8" prog="95" /> + <Patch name="Soundwork" hbank="63" lbank="8" prog="96" /> + <Patch name="For Bertje" hbank="63" lbank="8" prog="97" /> + <Patch name="Das Sneak" hbank="63" lbank="9" prog="97" /> + <Patch name="SeqPad" hbank="63" lbank="8" prog="98" /> + <Patch name="RingBell" hbank="63" lbank="8" prog="100" /> + <Patch name="Himalya" hbank="63" lbank="8" prog="102" /> + <Patch name="Creamy" hbank="63" lbank="8" prog="103" /> + <Patch name="DreaminOfU" hbank="63" lbank="8" prog="104" /> + <Patch name="Zynitas" hbank="63" lbank="8" prog="105" /> + <Patch name="UFOric" hbank="63" lbank="2" prog="107" /> + <Patch name="ChillOut" hbank="63" lbank="8" prog="107" /> + <Patch name="Strong Jam" hbank="63" lbank="2" prog="108" /> + <Patch name="Poly HPF" hbank="63" lbank="2" prog="109" /> + <Patch name="V.S.E.Seq" hbank="63" lbank="8" prog="109" /> + <Patch name="SweetNoize" hbank="63" lbank="2" prog="110" /> + <Patch name="Orongo" hbank="63" lbank="8" prog="110" /> + <Patch name="Dawn" hbank="63" lbank="8" prog="111" /> + <Patch name="Step Dance" hbank="63" lbank="2" prog="112" /> + <Patch name="Tangerine" hbank="63" lbank="8" prog="112" /> + <Patch name="EuroKidz" hbank="63" lbank="2" prog="113" /> + <Patch name="Chocolate" hbank="63" lbank="8" prog="113" /> + <Patch name="Zippet" hbank="63" lbank="9" prog="113" /> + <Patch name="Safari" hbank="63" lbank="8" prog="114" /> + <Patch name="Sushima" hbank="63" lbank="8" prog="115" /> + <Patch name="Metaloop" hbank="63" lbank="8" prog="116" /> + <Patch name="SimplyRndm" hbank="63" lbank="2" prog="117" /> + <Patch name="Kick Off" hbank="63" lbank="8" prog="117" /> + <Patch name="Soft Ice" hbank="63" lbank="2" prog="118" /> + <Patch name="Technokrat" hbank="63" lbank="8" prog="118" /> + <Patch name="Hi 2 Lo MW" hbank="63" lbank="8" prog="119" /> + <Patch name="Engineer" hbank="63" lbank="8" prog="120" /> + <Patch name="Neon Soda" hbank="63" lbank="8" prog="121" /> + <Patch name="Mocha" hbank="63" lbank="8" prog="122" /> + <Patch name="SQ02 Wheel" hbank="63" lbank="9" prog="123" /> + <Patch name="TubulrBel" hbank="0" lbank="0" prog="14" /> + <Patch name="Tibetan" hbank="63" lbank="0" prog="36" /> + <Patch name="Twinkle" hbank="63" lbank="0" prog="37" /> + <Patch name="ChorusBell" hbank="63" lbank="0" prog="38" /> + <Patch name="Stack Bell" hbank="63" lbank="0" prog="39" /> + <Patch name="J-Pop" hbank="63" lbank="0" prog="40" /> + <Patch name="WoodBell" hbank="63" lbank="0" prog="41" /> + <Patch name="Tmp/Bl/Glk" hbank="63" lbank="0" prog="42" /> + <Patch name="J-Pop" hbank="63" lbank="9" prog="46" /> + <Patch name="Stack Bell" hbank="63" lbank="9" prog="62" /> + <Patch name="Bali Bells" hbank="63" lbank="8" prog="69" /> + <Patch name="Bell Shop" hbank="63" lbank="8" prog="70" /> + <Patch name="RandomBell" hbank="63" lbank="9" prog="78" /> + <Patch name="RandomBell" hbank="63" lbank="3" prog="87" /> + <Patch name="Anime Box" hbank="63" lbank="3" prog="88" /> + <Patch name="Clackbel" hbank="63" lbank="3" prog="89" /> + <Patch name="Hard Bell" hbank="63" lbank="3" prog="90" /> + <Patch name="Crystal" hbank="0" lbank="0" prog="98" /> + <Patch name="Tmp/Bl/Glk" hbank="63" lbank="9" prog="110" /> + <Patch name="Tinkerbel" hbank="0" lbank="0" prog="112" /> + <Patch name="Celeste" hbank="0" lbank="0" prog="8" /> + <Patch name="Glocken" hbank="0" lbank="0" prog="9" /> + <Patch name="Vibes" hbank="0" lbank="0" prog="11" /> + <Patch name="Marimba" hbank="0" lbank="0" prog="12" /> + <Patch name="Xylophone" hbank="0" lbank="0" prog="13" /> + <Patch name="Steeldrum" hbank="0" lbank="0" prog="114" /> + <Patch name="Music Box" hbank="0" lbank="0" prog="10" /> + <Patch name="Dulcimar" hbank="0" lbank="0" prog="15" /> + <Patch name="Tmpni+Cym" hbank="0" lbank="0" prog="47" /> + <Patch name="Kalimba" hbank="0" lbank="0" prog="108" /> + + </PatchGroup> + + <PatchGroup name="Dr"> + <Patch name="MelodicTom" hbank="0" lbank="0" prog="117" /> + <Patch name="Synth Drum" hbank="0" lbank="0" prog="118" /> + <Patch name="OrcDrummer" hbank="63" lbank="8" prog="127" /> + <Patch name="Tabla Zone" hbank="63" lbank="1" prog="70" /> + <Patch name="Agogo" hbank="0" lbank="0" prog="113" /> + <Patch name="Woodblock" hbank="0" lbank="0" prog="115" /> + <Patch name="Taikodrum" hbank="0" lbank="0" prog="116" /> + <Patch name="Tribal" hbank="63" lbank="8" prog="126" /> + <Patch name="Khol" hbank="63" lbank="3" prog="127" /> + </PatchGroup> + + <PatchGroup name="Gt"> + <Patch name="Velo Nylon" hbank="0" lbank="0" prog="24" /> + <Patch name="Steel" hbank="0" lbank="0" prog="25" /> + <Patch name="Unplugged" hbank="63" lbank="8" prog="32" /> + <Patch name="FolkGuitar" hbank="63" lbank="8" prog="33" /> + <Patch name="Strum12Str" hbank="63" lbank="8" prog="34" /> + <Patch name="Thin Pick" hbank="63" lbank="8" prog="35" /> + <Patch name="ThickStrum" hbank="63" lbank="8" prog="36" /> + <Patch name="LazyChorus" hbank="63" lbank="8" prog="37" /> + <Patch name="Latin Jam" hbank="63" lbank="8" prog="38" /> + <Patch name="Slippery" hbank="63" lbank="8" prog="39" /> + <Patch name="Nylon Arp" hbank="63" lbank="8" prog="40" /> + <Patch name="Touch Funk" hbank="63" lbank="8" prog="42" /> + <Patch name="Nylon+Harm" hbank="63" lbank="0" prog="66" /> + <Patch name="SteelCmprs" hbank="63" lbank="0" prog="67" /> + <Patch name="Ac-Harmnic" hbank="63" lbank="0" prog="68" /> + <Patch name="Mega Steel" hbank="63" lbank="9" prog="68" /> + <Patch name="Mega Steel" hbank="63" lbank="0" prog="69" /> + <Patch name="12Strings" hbank="63" lbank="0" prog="70" /> + <Patch name="CleanEl-Ac" hbank="63" lbank="0" prog="71" /> + <Patch name="Feedbacker" hbank="63" lbank="9" prog="4" /> + <Patch name="ModernJazz" hbank="0" lbank="0" prog="26" /> + <Patch name="Clean Gt" hbank="0" lbank="0" prog="27" /> + <Patch name="Mute" hbank="0" lbank="0" prog="28" /> + <Patch name="Overdrive" hbank="0" lbank="0" prog="29" /> + <Patch name="Distortion" hbank="0" lbank="0" prog="30" /> + <Patch name="Harmonics" hbank="0" lbank="0" prog="31" /> + <Patch name="Wah Lead" hbank="63" lbank="9" prog="36" /> + <Patch name="WackaWacka" hbank="63" lbank="8" prog="41" /> + <Patch name="Funk Star" hbank="63" lbank="8" prog="43" /> + <Patch name="Clean Funk" hbank="63" lbank="8" prog="44" /> + <Patch name="Riff Rock" hbank="63" lbank="8" prog="45" /> + <Patch name="Dist. Lick" hbank="63" lbank="8" prog="46" /> + <Patch name="VintageAmp" hbank="63" lbank="8" prog="47" /> + <Patch name="RockBackin" hbank="63" lbank="8" prog="48" /> + <Patch name="Wah Lead" hbank="63" lbank="8" prog="49" /> + <Patch name="OverTopArp" hbank="63" lbank="8" prog="50" /> + <Patch name="JazzGtMelo" hbank="63" lbank="0" prog="72" /> + <Patch name="2CoilAmp" hbank="63" lbank="0" prog="73" /> + <Patch name="CleanSlap" hbank="63" lbank="0" prog="74" /> + <Patch name="SomeHair" hbank="63" lbank="0" prog="75" /> + <Patch name="MiddyTrem" hbank="63" lbank="0" prog="76" /> + <Patch name="CompDream" hbank="63" lbank="0" prog="77" /> + <Patch name="Spanky" hbank="63" lbank="0" prog="78" /> + <Patch name="1CoilChors" hbank="63" lbank="0" prog="79" /> + <Patch name="VinTremolo" hbank="63" lbank="0" prog="80" /> + <Patch name="Policia" hbank="63" lbank="0" prog="81" /> + <Patch name="Rockabilly" hbank="63" lbank="0" prog="82" /> + <Patch name="Rotator" hbank="63" lbank="0" prog="83" /> + <Patch name="TouchWah" hbank="63" lbank="0" prog="84" /> + <Patch name="Mega Clean" hbank="63" lbank="0" prog="85" /> + <Patch name="OverDriven" hbank="63" lbank="0" prog="86" /> + <Patch name="TexBoogie" hbank="63" lbank="0" prog="87" /> + <Patch name="Feedbacker" hbank="63" lbank="0" prog="88" /> + <Patch name="Voodooman" hbank="63" lbank="0" prog="89" /> + <Patch name="LatinLover" hbank="63" lbank="0" prog="90" /> + <Patch name="BlueLead" hbank="63" lbank="0" prog="91" /> + <Patch name="Metal Mute" hbank="63" lbank="0" prog="92" /> + <Patch name="OverTheTop" hbank="63" lbank="0" prog="93" /> + <Patch name="Mega Dist" hbank="63" lbank="0" prog="94" /> + <Patch name="2CoilAmp" hbank="63" lbank="9" prog="100" /> + <Patch name="BeautyHarp" hbank="63" lbank="1" prog="5" /> + <Patch name="Santur" hbank="63" lbank="9" prog="6" /> + <Patch name="Kanun" hbank="63" lbank="9" prog="22" /> + <Patch name="Karbala 1" hbank="63" lbank="9" prog="38" /> + <Patch name="Harp" hbank="0" lbank="0" prog="46" /> + <Patch name="Santur" hbank="63" lbank="1" prog="61" /> + <Patch name="Kotoun" hbank="63" lbank="1" prog="62" /> + <Patch name="Kanun" hbank="63" lbank="1" prog="63" /> + <Patch name="Bouzuki" hbank="63" lbank="1" prog="64" /> + <Patch name="Oud" hbank="63" lbank="1" prog="65" /> + <Patch name="WhereAmI?" hbank="63" lbank="1" prog="66" /> + <Patch name="Funk Delhi" hbank="63" lbank="9" prog="70" /> + <Patch name="BaglamaArp" hbank="63" lbank="8" prog="80" /> + <Patch name="Karbala 1" hbank="63" lbank="8" prog="81" /> + <Patch name="Karbala 2" hbank="63" lbank="8" prog="82" /> + <Patch name="Funk Delhi" hbank="63" lbank="8" prog="87" /> + <Patch name="Sitar" hbank="0" lbank="0" prog="104" /> + <Patch name="Banjo" hbank="0" lbank="0" prog="105" /> + <Patch name="Shamisen" hbank="0" lbank="0" prog="106" /> + <Patch name="Koto" hbank="0" lbank="0" prog="107" /> + <Patch name="BeautyHarp" hbank="63" lbank="9" prog="119" /> + </PatchGroup> + + <PatchGroup name="Kb"> + <Patch name="Brite Clav" hbank="0" lbank="0" prog="7" /> + <Patch name="SuperClavi" hbank="63" lbank="0" prog="31" /> + <Patch name="StereoClav" hbank="63" lbank="0" prog="32" /> + <Patch name="HollowClav" hbank="63" lbank="0" prog="33" /> + <Patch name="Nu Phasing" hbank="63" lbank="0" prog="34" /> + <Patch name="TouchClavi" hbank="63" lbank="0" prog="35" /> + <Patch name="Arp Clavi" hbank="63" lbank="8" prog="67" /> + <Patch name="TouchClavi" hbank="63" lbank="9" prog="73" /> + <Patch name="SuperClavi" hbank="63" lbank="9" prog="89" /> + <Patch name="E.Piano 1" hbank="0" lbank="0" prog="4" /> + <Patch name="E.Piano 2" hbank="0" lbank="0" prog="5" /> + <Patch name="Vintage74" hbank="63" lbank="9" prog="9" /> + <Patch name="Yama EPs" hbank="63" lbank="0" prog="13" /> + <Patch name="DynoStrait" hbank="63" lbank="0" prog="14" /> + <Patch name="ChorusHard" hbank="63" lbank="0" prog="15" /> + <Patch name="R-B Soft" hbank="63" lbank="0" prog="16" /> + <Patch name="Phaser Vin" hbank="63" lbank="0" prog="17" /> + <Patch name="Vintage74" hbank="63" lbank="0" prog="18" /> + <Patch name="Sweetness" hbank="63" lbank="0" prog="19" /> + <Patch name="Max Tine" hbank="63" lbank="0" prog="20" /> + <Patch name="VintagCase" hbank="63" lbank="0" prog="21" /> + <Patch name="Contempo" hbank="63" lbank="0" prog="22" /> + <Patch name="SparkleTin" hbank="63" lbank="0" prog="24" /> + <Patch name="TX802" hbank="63" lbank="0" prog="25" /> + <Patch name="Sweetness" hbank="63" lbank="9" prog="25" /> + <Patch name="Bell DX" hbank="63" lbank="0" prog="26" /> + <Patch name="Dark DX" hbank="63" lbank="0" prog="27" /> + <Patch name="GS Tines" hbank="63" lbank="0" prog="28" /> + <Patch name="WurliTrem" hbank="63" lbank="0" prog="29" /> + <Patch name="WurliAmped" hbank="63" lbank="0" prog="30" /> + <Patch name="R-B Soft" hbank="63" lbank="9" prog="41" /> + <Patch name="WurliAmped" hbank="63" lbank="9" prog="57" /> + <Patch name="VintageArp" hbank="63" lbank="8" prog="66" /> + <Patch name="Pianyl" hbank="63" lbank="3" prog="85" /> + <Patch name="TX802" hbank="63" lbank="9" prog="121" /> + <Patch name="Harpsicord" hbank="0" lbank="0" prog="6" /> + <Patch name="Accordion" hbank="0" lbank="0" prog="21" /> + <Patch name="TangoAccrd" hbank="0" lbank="0" prog="23" /> + <Patch name="E.PianoPad" hbank="63" lbank="0" prog="23" /> + </PatchGroup> + + <PatchGroup name="Ld"> + <Patch name="PulseWidth" hbank="63" lbank="2" prog="0" /> + <Patch name="Phat Dino" hbank="63" lbank="9" prog="5" /> + <Patch name="Dirty Hook" hbank="63" lbank="9" prog="11" /> + <Patch name="Cool Body" hbank="63" lbank="9" prog="37" /> + <Patch name="Power Hook" hbank="63" lbank="3" prog="39" /> + <Patch name="Dirty Hook" hbank="63" lbank="3" prog="40" /> + <Patch name="Push Ahead" hbank="63" lbank="3" prog="41" /> + <Patch name="Tekk Glide" hbank="63" lbank="3" prog="42" /> + <Patch name="Growl Tekk" hbank="63" lbank="3" prog="43" /> + <Patch name="Cool Body" hbank="63" lbank="3" prog="44" /> + <Patch name="LdDuck" hbank="63" lbank="9" prog="44" /> + <Patch name="LdDuck" hbank="63" lbank="3" prog="47" /> + <Patch name="Screameemy" hbank="63" lbank="3" prog="48" /> + <Patch name="DynmcMini" hbank="63" lbank="3" prog="50" /> + <Patch name="PinzLead" hbank="63" lbank="3" prog="51" /> + <Patch name="Sutra" hbank="63" lbank="3" prog="52" /> + <Patch name="PinzLead" hbank="63" lbank="9" prog="53" /> + <Patch name="TrncHook" hbank="63" lbank="2" prog="68" /> + <Patch name="Portatone" hbank="63" lbank="2" prog="69" /> + <Patch name="VintageSaw" hbank="63" lbank="9" prog="69" /> + <Patch name="Phat Dino" hbank="63" lbank="2" prog="75" /> + <Patch name="Big Lead" hbank="63" lbank="2" prog="76" /> + <Patch name="Square Ld" hbank="0" lbank="0" prog="80" /> + <Patch name="Saw Ld" hbank="0" lbank="0" prog="81" /> + <Patch name="Chiff Ld" hbank="0" lbank="0" prog="83" /> + <Patch name="Charan Ld" hbank="0" lbank="0" prog="84" /> + <Patch name="ThinkSync" hbank="63" lbank="9" prog="85" /> + <Patch name="Fifth Ld" hbank="0" lbank="0" prog="86" /> + <Patch name="Bass-Ld" hbank="0" lbank="0" prog="87" /> + <Patch name="R-B Solo" hbank="63" lbank="8" prog="88" /> + <Patch name="WoodPanel" hbank="63" lbank="9" prog="101" /> + <Patch name="HPF Dance" hbank="63" lbank="2" prog="102" /> + <Patch name="Mini Three" hbank="63" lbank="1" prog="104" /> + <Patch name="VintageSaw" hbank="63" lbank="1" prog="105" /> + <Patch name="Punch Lead" hbank="63" lbank="1" prog="106" /> + <Patch name="Bright Saw" hbank="63" lbank="1" prog="107" /> + <Patch name="Chordz" hbank="63" lbank="9" prog="107" /> + <Patch name="FunkyPulse" hbank="63" lbank="1" prog="110" /> + <Patch name="Trojan" hbank="63" lbank="1" prog="111" /> + <Patch name="Crying" hbank="63" lbank="1" prog="113" /> + <Patch name="WoodPanel" hbank="63" lbank="1" prog="114" /> + <Patch name="JustASync" hbank="63" lbank="1" prog="115" /> + <Patch name="ThinkSync" hbank="63" lbank="1" prog="116" /> + <Patch name="FlangeFilt" hbank="63" lbank="1" prog="117" /> + <Patch name="Tekk Glide" hbank="63" lbank="9" prog="117" /> + <Patch name="PulseWound" hbank="63" lbank="1" prog="119" /> + <Patch name="SpaceLead" hbank="63" lbank="1" prog="125" /> + <Patch name="Chordz" hbank="63" lbank="2" prog="127" /> + <Patch name="NuMini" hbank="63" lbank="2" prog="1" /> + <Patch name="Clicky Saw" hbank="63" lbank="2" prog="2" /> + <Patch name="Sonix" hbank="63" lbank="9" prog="21" /> + <Patch name="minor3rd" hbank="63" lbank="3" prog="45" /> + <Patch name="Sonix" hbank="63" lbank="3" prog="46" /> + <Patch name="Schoolday" hbank="63" lbank="3" prog="49" /> + <Patch name="BlownTube" hbank="63" lbank="3" prog="53" /> + <Patch name="Rap Lead" hbank="63" lbank="9" prog="60" /> + <Patch name="Soft RnB" hbank="63" lbank="9" prog="76" /> + <Patch name="Caliop Ld" hbank="0" lbank="0" prog="82" /> + <Patch name="Voice Ld" hbank="0" lbank="0" prog="85" /> + <Patch name="DuckLead" hbank="63" lbank="9" prog="93" /> + <Patch name="OrbitSine" hbank="63" lbank="1" prog="108" /> + <Patch name="DuckLead" hbank="63" lbank="1" prog="109" /> + <Patch name="Feeling" hbank="63" lbank="1" prog="112" /> + <Patch name="Lucky" hbank="63" lbank="1" prog="118" /> + <Patch name="Rap Lead" hbank="63" lbank="1" prog="120" /> + <Patch name="Soft RnB" hbank="63" lbank="1" prog="121" /> + <Patch name="Sine Lead" hbank="63" lbank="1" prog="122" /> + <Patch name="Singleline" hbank="63" lbank="1" prog="123" /> + <Patch name="Soft Lead" hbank="63" lbank="1" prog="124" /> + <Patch name="Lucky" hbank="63" lbank="9" prog="125" /> + <Patch name="Mr. Finger" hbank="63" lbank="1" prog="126" /> + <Patch name="Mini Soft" hbank="63" lbank="1" prog="127" /> + </PatchGroup> + + <PatchGroup name="Me"> + <Patch name="VinylHit" hbank="63" lbank="9" prog="12" /> + <Patch name="Ambi Bite" hbank="63" lbank="9" prog="28" /> + <Patch name="Orch Hits" hbank="63" lbank="2" prog="35" /> + <Patch name="80s Hit" hbank="63" lbank="2" prog="36" /> + <Patch name="Orch.Hit" hbank="0" lbank="0" prog="55" /> + <Patch name="Ambi Bite" hbank="63" lbank="2" prog="91" /> + <Patch name="Hit-Down" hbank="63" lbank="2" prog="103" /> + <Patch name="Hit-Down" hbank="63" lbank="9" prog="108" /> + <Patch name="VinylHit" hbank="63" lbank="3" prog="116" /> + <Patch name="Prisoner" hbank="63" lbank="9" prog="0" /> + <Patch name="Vibrancy" hbank="63" lbank="9" prog="16" /> + <Patch name="Prisoner" hbank="63" lbank="2" prog="28" /> + <Patch name="Chromosome" hbank="63" lbank="2" prog="29" /> + <Patch name="Lynch Mob" hbank="63" lbank="2" prog="30" /> + <Patch name="Alioth" hbank="63" lbank="2" prog="31" /> + <Patch name="China Bird" hbank="63" lbank="2" prog="32" /> + <Patch name="Molecule" hbank="63" lbank="9" prog="32" /> + <Patch name="Vespers" hbank="63" lbank="2" prog="33" /> + <Patch name="Glacy" hbank="63" lbank="2" prog="34" /> + <Patch name="CosmicRain" hbank="63" lbank="2" prog="37" /> + <Patch name="Mckinley" hbank="63" lbank="2" prog="38" /> + <Patch name="Glass Tube" hbank="63" lbank="2" prog="39" /> + <Patch name="ModrnWinds" hbank="63" lbank="2" prog="40" /> + <Patch name="Echo" hbank="63" lbank="9" prog="48" /> + <Patch name="Chyo Ethno" hbank="63" lbank="9" prog="54" /> + <Patch name="Excavator" hbank="63" lbank="9" prog="64" /> + <Patch name="Long HiPa" hbank="63" lbank="2" prog="73" /> + <Patch name="Atlantis" hbank="63" lbank="1" prog="80" /> + <Patch name="Calculator" hbank="63" lbank="9" prog="80" /> + <Patch name="Forest" hbank="63" lbank="1" prog="81" /> + <Patch name="ProtoType" hbank="63" lbank="2" prog="88" /> + <Patch name="XtremeRezz" hbank="63" lbank="2" prog="90" /> + <Patch name="Clusters" hbank="63" lbank="2" prog="94" /> + <Patch name="Interlude" hbank="63" lbank="2" prog="95" /> + <Patch name="Felicity" hbank="63" lbank="3" prog="95" /> + <Patch name="Rain Pad" hbank="0" lbank="0" prog="96" /> + <Patch name="C Theme" hbank="63" lbank="2" prog="96" /> + <Patch name="Vibrancy" hbank="63" lbank="3" prog="96" /> + <Patch name="Interlude" hbank="63" lbank="9" prog="96" /> + <Patch name="Horizon" hbank="63" lbank="2" prog="97" /> + <Patch name="Metalflake" hbank="63" lbank="3" prog="97" /> + <Patch name="Bit Space" hbank="63" lbank="2" prog="98" /> + <Patch name="RadioVenus" hbank="63" lbank="3" prog="98" /> + </PatchGroup> + + <PatchGroup name="Or"> + <Patch name="Molecule" hbank="63" lbank="3" prog="99" /> + <Patch name="Waterproof" hbank="63" lbank="8" prog="99" /> + <Patch name="EkoWhistle" hbank="63" lbank="2" prog="100" /> + <Patch name="Clock" hbank="63" lbank="3" prog="100" /> + <Patch name="Goblin" hbank="0" lbank="0" prog="101" /> + <Patch name="Elec Blue" hbank="63" lbank="3" prog="101" /> + <Patch name="SpectrmArp" hbank="63" lbank="8" prog="101" /> + <Patch name="Echoes" hbank="0" lbank="0" prog="102" /> + <Patch name="Undersea" hbank="63" lbank="3" prog="102" /> + <Patch name="Echo" hbank="63" lbank="3" prog="103" /> + <Patch name="Slipstream" hbank="63" lbank="3" prog="104" /> + <Patch name="Chyo Ethno" hbank="63" lbank="3" prog="105" /> + <Patch name="MetalShapr" hbank="63" lbank="3" prog="106" /> + <Patch name="Magnetics" hbank="63" lbank="8" prog="106" /> + <Patch name="Mystix" hbank="63" lbank="3" prog="107" /> + <Patch name="Memories" hbank="63" lbank="3" prog="108" /> + <Patch name="Sand ES" hbank="63" lbank="8" prog="108" /> + <Patch name="Mstrvrt" hbank="63" lbank="3" prog="109" /> + <Patch name="Calculator" hbank="63" lbank="3" prog="110" /> + <Patch name="Hitori" hbank="63" lbank="3" prog="111" /> + <Patch name="Stutter" hbank="63" lbank="3" prog="112" /> + <Patch name="CosmicDust" hbank="63" lbank="9" prog="112" /> + <Patch name="Excavator" hbank="63" lbank="3" prog="113" /> + <Patch name="Warptek" hbank="63" lbank="3" prog="114" /> + <Patch name="CosmicDust" hbank="63" lbank="3" prog="115" /> + <Patch name="Lost Ring" hbank="63" lbank="2" prog="121" /> + <Patch name="PlasmaWarp" hbank="63" lbank="2" prog="122" /> + <Patch name="LuxAeterna" hbank="63" lbank="8" prog="123" /> + <Patch name="My Reality" hbank="63" lbank="2" prog="125" /> + <Patch name="Gladiator" hbank="63" lbank="2" prog="126" /> + <Patch name="RadioVenus" hbank="63" lbank="9" prog="126" /> + <Patch name="Draw Organ" hbank="0" lbank="0" prog="16" /> + <Patch name="Perc Organ" hbank="0" lbank="0" prog="17" /> + <Patch name="Rock Organ" hbank="0" lbank="0" prog="18" /> + <Patch name="Vintage C" hbank="63" lbank="9" prog="19" /> + <Patch name="Tradi" hbank="63" lbank="0" prog="46" /> + <Patch name="Green Tea" hbank="63" lbank="0" prog="50" /> + <Patch name="Vintage C" hbank="63" lbank="0" prog="51" /> + <Patch name="Jazzy 2" hbank="63" lbank="9" prog="51" /> + <Patch name="16+8+5-1/3" hbank="63" lbank="0" prog="52" /> + <Patch name="Jazzy 1" hbank="63" lbank="0" prog="53" /> + <Patch name="Jazzy 2" hbank="63" lbank="0" prog="54" /> + <Patch name="Slow Jam" hbank="63" lbank="0" prog="55" /> + <Patch name="Swishie" hbank="63" lbank="0" prog="56" /> + <Patch name="Flutey" hbank="63" lbank="0" prog="57" /> + <Patch name="DrawContrl" hbank="63" lbank="0" prog="58" /> + <Patch name="Fully" hbank="63" lbank="0" prog="59" /> + <Patch name="Progressy" hbank="63" lbank="0" prog="60" /> + <Patch name="Crunchy" hbank="63" lbank="0" prog="61" /> + <Patch name="Compact" hbank="63" lbank="9" prog="61" /> + <Patch name="Rocky" hbank="63" lbank="0" prog="62" /> + <Patch name="Early Bird" hbank="63" lbank="0" prog="63" /> + <Patch name="1967 Keys" hbank="63" lbank="0" prog="64" /> + <Patch name="Compact" hbank="63" lbank="0" prog="65" /> + <Patch name="House Org" hbank="63" lbank="8" prog="68" /> + <Patch name="1967 Keys" hbank="63" lbank="9" prog="77" /> + <Patch name="Crunchy" hbank="63" lbank="9" prog="83" /> + <Patch name="DigiOrg" hbank="63" lbank="3" prog="86" /> + <Patch name="Fully" hbank="63" lbank="9" prog="115" /> + <Patch name="Reed Organ" hbank="0" lbank="0" prog="20" /> + <Patch name="Bollinger" hbank="63" lbank="2" prog="111" /> + <Patch name="ChurchOrgn" hbank="0" lbank="0" prog="19" /> + <Patch name="St. Paul" hbank="63" lbank="0" prog="43" /> + <Patch name="Fluty Pipe" hbank="63" lbank="0" prog="44" /> + <Patch name="St. Peter" hbank="63" lbank="0" prog="45" /> + <Patch name="Sunday" hbank="63" lbank="0" prog="47" /> + <Patch name="Reedy Pipe" hbank="63" lbank="0" prog="48" /> + <Patch name="Prelude" hbank="63" lbank="0" prog="49" /> + <Patch name="Cold Day" hbank="63" lbank="9" prog="8" /> + </PatchGroup> + + <PatchGroup name="Pd"> + <Patch name="Tibet Ens." hbank="63" lbank="9" prog="14" /> + <Patch name="Turbulence" hbank="63" lbank="9" prog="24" /> + <Patch name="Ice Rink" hbank="63" lbank="3" prog="65" /> + <Patch name="Zircon" hbank="63" lbank="3" prog="66" /> + <Patch name="Xdreams" hbank="63" lbank="3" prog="67" /> + <Patch name="Cold Day" hbank="63" lbank="3" prog="68" /> + <Patch name="Livin Pad" hbank="63" lbank="3" prog="69" /> + <Patch name="Flangewall" hbank="63" lbank="2" prog="70" /> + <Patch name="SharpTeeth" hbank="63" lbank="3" prog="70" /> + <Patch name="HPF+LPFpad" hbank="63" lbank="2" prog="71" /> + <Patch name="Trance MW" hbank="63" lbank="2" prog="72" /> + <Patch name="Whisperer" hbank="63" lbank="9" prog="72" /> + <Patch name="Pad-Syn" hbank="63" lbank="2" prog="74" /> + <Patch name="Turbulence" hbank="63" lbank="3" prog="74" /> + <Patch name="Tranquil" hbank="63" lbank="3" prog="75" /> + <Patch name="Trance MW" hbank="63" lbank="9" prog="75" /> + <Patch name="Paradies" hbank="63" lbank="1" prog="77" /> + <Patch name="Westerlies" hbank="63" lbank="1" prog="78" /> + <Patch name="Tibet Ens." hbank="63" lbank="1" prog="79" /> + <Patch name="New Age" hbank="0" lbank="0" prog="88" /> + <Patch name="Ana Dreams" hbank="63" lbank="1" prog="88" /> + <Patch name="SharpTeeth" hbank="63" lbank="9" prog="88" /> + <Patch name="Poly Synth" hbank="0" lbank="0" prog="90" /> + <Patch name="Twist Pad" hbank="63" lbank="1" prog="91" /> + <Patch name="Voxy Air" hbank="63" lbank="1" prog="92" /> + <Patch name="Metal Pad" hbank="0" lbank="0" prog="93" /> + <Patch name="Halo Pad" hbank="0" lbank="0" prog="94" /> + <Patch name="Fazer Pad" hbank="63" lbank="1" prog="94" /> + <Patch name="Sweep Pad" hbank="0" lbank="0" prog="95" /> + <Patch name="GreenGiant" hbank="63" lbank="1" prog="95" /> + <Patch name="SoundTrack" hbank="0" lbank="0" prog="97" /> + <Patch name="Arc-light" hbank="63" lbank="1" prog="97" /> + <Patch name="FrozenPad" hbank="63" lbank="1" prog="101" /> + <Patch name="Sadness" hbank="63" lbank="1" prog="102" /> + <Patch name="Sci-Fi" hbank="0" lbank="0" prog="103" /> + <Patch name="Whisperer" hbank="63" lbank="1" prog="103" /> + <Patch name="Westerlies" hbank="63" lbank="9" prog="104" /> + <Patch name="Flangewall" hbank="63" lbank="9" prog="120" /> + <Patch name="Aah Choir" hbank="0" lbank="0" prog="52" /> + <Patch name="Ooh Choir" hbank="0" lbank="0" prog="53" /> + <Patch name="Syn Voice" hbank="0" lbank="0" prog="54" /> + <Patch name="ChurchOohs" hbank="63" lbank="1" prog="72" /> + <Patch name="Ooh-Aah" hbank="63" lbank="1" prog="73" /> + <Patch name="SynChoir" hbank="63" lbank="1" prog="74" /> + <Patch name="SpaceChoir" hbank="63" lbank="1" prog="75" /> + <Patch name="AquaStop" hbank="63" lbank="1" prog="76" /> + <Patch name="The Breath" hbank="63" lbank="3" prog="78" /> + <Patch name="Choir Pad" hbank="0" lbank="0" prog="91" /> + <Patch name="MothrEarth" hbank="63" lbank="9" prog="40" /> + <Patch name="YelloRiver" hbank="63" lbank="9" prog="56" /> + <Patch name="MothrEarth" hbank="63" lbank="3" prog="71" /> + <Patch name="Royal" hbank="63" lbank="3" prog="72" /> + <Patch name="SoftBrassy" hbank="63" lbank="3" prog="73" /> + <Patch name="DreamShift" hbank="63" lbank="3" prog="76" /> + <Patch name="YelloRiver" hbank="63" lbank="3" prog="77" /> + <Patch name="High Wire" hbank="63" lbank="3" prog="79" /> + <Patch name="Humanity" hbank="63" lbank="3" prog="80" /> + <Patch name="Climber" hbank="63" lbank="3" prog="81" /> + <Patch name="Analog" hbank="63" lbank="1" prog="82" /> + <Patch name="Deception" hbank="63" lbank="3" prog="82" /> + <Patch name="MellowAnlg" hbank="63" lbank="1" prog="83" /> + <Patch name="Chorus Pad" hbank="63" lbank="3" prog="83" /> + <Patch name="Square" hbank="63" lbank="1" prog="84" /> + <Patch name="BackPad MW" hbank="63" lbank="1" prog="85" /> + <Patch name="PWM Soft" hbank="63" lbank="1" prog="86" /> + <Patch name="Sine Pad" hbank="63" lbank="1" prog="87" /> + <Patch name="Warm Pad" hbank="0" lbank="0" prog="89" /> + <Patch name="BrassMover" hbank="63" lbank="1" prog="89" /> + <Patch name="Dark Light" hbank="63" lbank="1" prog="90" /> + <Patch name="BowedPad" hbank="0" lbank="0" prog="92" /> + <Patch name="Ore" hbank="63" lbank="1" prog="93" /> + <Patch name="LoFi-Maj7" hbank="63" lbank="2" prog="93" /> + <Patch name="Ohm-Like" hbank="63" lbank="1" prog="96" /> + <Patch name="Grass Arp" hbank="63" lbank="1" prog="98" /> + <Patch name="Atmosphere" hbank="0" lbank="0" prog="99" /> + <Patch name="Vapor" hbank="63" lbank="1" prog="99" /> + <Patch name="Silverlake" hbank="63" lbank="1" prog="100" /> + <Patch name="X-fade Pad" hbank="63" lbank="2" prog="120" /> + </PatchGroup> + + <PatchGroup name="Sc"> + <Patch name="Harmonica" hbank="0" lbank="0" prog="22" /> + <Patch name="BluzDistrt" hbank="63" lbank="1" prog="59" /> + <Patch name="TootsyHarp" hbank="63" lbank="1" prog="60" /> + <Patch name="Zurna" hbank="63" lbank="1" prog="68" /> + <Patch name="SweetFlute" hbank="63" lbank="9" prog="7" /> + <Patch name="TronFlt" hbank="63" lbank="9" prog="45" /> + <Patch name="SweetFlute" hbank="63" lbank="1" prog="57" /> + <Patch name="TapeFlute" hbank="63" lbank="1" prog="58" /> + <Patch name="Ney" hbank="63" lbank="1" prog="67" /> + <Patch name="Digidoo" hbank="63" lbank="1" prog="69" /> + <Patch name="Piccolo" hbank="0" lbank="0" prog="72" /> + <Patch name="Flute" hbank="0" lbank="0" prog="73" /> + <Patch name="Recorder" hbank="0" lbank="0" prog="74" /> + <Patch name="Panflute" hbank="0" lbank="0" prog="75" /> + <Patch name="Bottle" hbank="0" lbank="0" prog="76" /> + <Patch name="Shakuhachi" hbank="0" lbank="0" prog="77" /> + <Patch name="Whistle" hbank="0" lbank="0" prog="78" /> + <Patch name="Ocarina" hbank="0" lbank="0" prog="79" /> + <Patch name="Velo Flute" hbank="63" lbank="8" prog="79" /> + <Patch name="Ney Arp" hbank="63" lbank="8" prog="83" /> + <Patch name="TronFlt" hbank="63" lbank="3" prog="93" /> + <Patch name="Irish" hbank="63" lbank="3" prog="94" /> + <Patch name="Ney" hbank="63" lbank="9" prog="102" /> + <Patch name="Digidoo" hbank="63" lbank="9" prog="118" /> + <Patch name="SoprnoSoft" hbank="63" lbank="1" prog="46" /> + <Patch name="Alto Vib" hbank="63" lbank="1" prog="47" /> + <Patch name="Velo Alto" hbank="63" lbank="1" prog="48" /> + <Patch name="Tenor Soft" hbank="63" lbank="1" prog="49" /> + <Patch name="Hip Bari" hbank="63" lbank="1" prog="50" /> + <Patch name="4 Brothers" hbank="63" lbank="1" prog="51" /> + <Patch name="Sweet Oboe" hbank="63" lbank="1" prog="52" /> + <Patch name="BassoonVib" hbank="63" lbank="1" prog="53" /> + <Patch name="Clarinet 1" hbank="63" lbank="1" prog="54" /> + <Patch name="WW Trio" hbank="63" lbank="1" prog="55" /> + <Patch name="DblRdQuart" hbank="63" lbank="1" prog="56" /> + <Patch name="Soprano" hbank="0" lbank="0" prog="64" /> + <Patch name="Alto Sax" hbank="0" lbank="0" prog="65" /> + <Patch name="TenorSax" hbank="0" lbank="0" prog="66" /> + <Patch name="Bari Sax" hbank="0" lbank="0" prog="67" /> + <Patch name="Oboe" hbank="0" lbank="0" prog="68" /> + <Patch name="Eng.Horn" hbank="0" lbank="0" prog="69" /> + <Patch name="Bassoon" hbank="0" lbank="0" prog="70" /> + <Patch name="Clarinet 2" hbank="0" lbank="0" prog="71" /> + <Patch name="Bagpipe" hbank="0" lbank="0" prog="109" /> + <Patch name="Shehnai" hbank="0" lbank="0" prog="111" /> + <Patch name="Echo Comp" hbank="63" lbank="9" prog="2" /> + <Patch name="CoolTrance" hbank="63" lbank="9" prog="18" /> + <Patch name="W Phaser" hbank="63" lbank="9" prog="27" /> + <Patch name="Trans-D" hbank="63" lbank="3" prog="29" /> + <Patch name="TranceTaO" hbank="63" lbank="3" prog="30" /> + <Patch name="W Phaser" hbank="63" lbank="3" prog="31" /> + <Patch name="CoolTrance" hbank="63" lbank="3" prog="32" /> + <Patch name="Echo Comp" hbank="63" lbank="3" prog="33" /> + <Patch name="Tuxedo" hbank="63" lbank="3" prog="34" /> + <Patch name="Tuxedo" hbank="63" lbank="9" prog="34" /> + <Patch name="P5AnaPunch" hbank="63" lbank="3" prog="36" /> + <Patch name="DPCM Atack" hbank="63" lbank="3" prog="38" /> + <Patch name="Wireman" hbank="63" lbank="2" prog="41" /> + <Patch name="BigComp" hbank="63" lbank="2" prog="43" /> + <Patch name="TranceTaO" hbank="63" lbank="9" prog="43" /> + <Patch name="NoizRezz" hbank="63" lbank="2" prog="44" /> + <Patch name="Cool Tech" hbank="63" lbank="2" prog="45" /> + <Patch name="Talker" hbank="63" lbank="2" prog="46" /> + <Patch name="NightWatch" hbank="63" lbank="2" prog="49" /> + <Patch name="Antares" hbank="63" lbank="9" prog="50" /> + <Patch name="Antares" hbank="63" lbank="2" prog="51" /> + <Patch name="Retro" hbank="63" lbank="2" prog="53" /> + <Patch name="PopularSyn" hbank="63" lbank="2" prog="54" /> + <Patch name="PWM Percu" hbank="63" lbank="2" prog="55" /> + <Patch name="Ore-Tech" hbank="63" lbank="2" prog="56" /> + <Patch name="PlukdThing" hbank="63" lbank="2" prog="57" /> + <Patch name="PluckBells" hbank="63" lbank="2" prog="58" /> + <Patch name="FaaatDance" hbank="63" lbank="2" prog="77" /> + <Patch name="DPCM Atack" hbank="63" lbank="9" prog="82" /> + <Patch name="Olde Skool" hbank="63" lbank="9" prog="92" /> + <Patch name="Talker" hbank="63" lbank="9" prog="98" /> + <Patch name="Brightness" hbank="0" lbank="0" prog="100" /> + <Patch name="Moai" hbank="63" lbank="2" prog="101" /> + <Patch name="Griffin" hbank="63" lbank="2" prog="104" /> + <Patch name="Olde Skool" hbank="63" lbank="2" prog="105" /> + <Patch name="TranceStab" hbank="63" lbank="2" prog="106" /> + <Patch name="Moai" hbank="63" lbank="9" prog="114" /> + <Patch name="Queens" hbank="63" lbank="2" prog="123" /> + <Patch name="Mizar" hbank="63" lbank="2" prog="124" /> + <Patch name="Equatorial" hbank="63" lbank="3" prog="35" /> + <Patch name="SilkRoad" hbank="63" lbank="3" prog="37" /> + <Patch name="After All" hbank="63" lbank="2" prog="42" /> + <Patch name="Icing" hbank="63" lbank="2" prog="47" /> + <Patch name="Wobbly" hbank="63" lbank="2" prog="48" /> + <Patch name="StringBell" hbank="63" lbank="2" prog="50" /> + <Patch name="Airy Nylon" hbank="63" lbank="2" prog="52" /> + <Patch name="Sine Comp" hbank="63" lbank="2" prog="59" /> + <Patch name="SilkRoad" hbank="63" lbank="9" prog="66" /> + <Patch name="StringBell" hbank="63" lbank="9" prog="94" /> + </PatchGroup> + + <PatchGroup name="Se"> + <Patch name="Fret Noise" hbank="0" lbank="0" prog="120" /> + <Patch name="BreathNoiz" hbank="0" lbank="0" prog="121" /> + <Patch name="Seashore" hbank="0" lbank="0" prog="122" /> + <Patch name="Tweet" hbank="0" lbank="0" prog="123" /> + <Patch name="Telephone" hbank="0" lbank="0" prog="124" /> + <Patch name="Helicopter" hbank="0" lbank="0" prog="125" /> + <Patch name="Applause" hbank="0" lbank="0" prog="126" /> + <Patch name="Gunshot" hbank="0" lbank="0" prog="127" /> + <Patch name="NoControl" hbank="63" lbank="9" prog="15" /> + <Patch name="FX Jam" hbank="63" lbank="8" prog="16" /> + <Patch name="MouthShots" hbank="63" lbank="8" prog="18" /> + <Patch name="Network" hbank="63" lbank="2" prog="23" /> + <Patch name="Lazerzz" hbank="63" lbank="2" prog="24" /> + <Patch name="Spacecraft" hbank="63" lbank="2" prog="25" /> + <Patch name="The Gate" hbank="63" lbank="2" prog="26" /> + <Patch name="NevrRepeat" hbank="63" lbank="2" prog="27" /> + <Patch name="PilotPlant" hbank="63" lbank="9" prog="31" /> + <Patch name="Toukai" hbank="63" lbank="9" prog="47" /> + <Patch name="Modulator" hbank="63" lbank="9" prog="63" /> + <Patch name="UndrForest" hbank="63" lbank="9" prog="79" /> + <Patch name="Sprocket" hbank="63" lbank="2" prog="85" /> + <Patch name="Ringvoxx" hbank="63" lbank="2" prog="86" /> + <Patch name="Crazy Bird" hbank="63" lbank="2" prog="87" /> + <Patch name="Asp" hbank="63" lbank="2" prog="89" /> + <Patch name="RevReality" hbank="63" lbank="2" prog="92" /> + <Patch name="NevrRepeat" hbank="63" lbank="9" prog="95" /> + <Patch name="Thexism" hbank="63" lbank="2" prog="99" /> + <Patch name="Sprocket" hbank="63" lbank="9" prog="111" /> + <Patch name="UndrGround" hbank="63" lbank="3" prog="117" /> + <Patch name="NoControl" hbank="63" lbank="3" prog="118" /> + <Patch name="Rev Cymbal" hbank="0" lbank="0" prog="119" /> + <Patch name="The Ripper" hbank="63" lbank="2" prog="119" /> + <Patch name="Propagate" hbank="63" lbank="3" prog="119" /> + <Patch name="UndrForest" hbank="63" lbank="3" prog="120" /> + <Patch name="PilotPlant" hbank="63" lbank="3" prog="121" /> + <Patch name="Expansion" hbank="63" lbank="3" prog="122" /> + <Patch name="Eggoo" hbank="63" lbank="3" prog="123" /> + <Patch name="Modulator" hbank="63" lbank="3" prog="124" /> + <Patch name="In My Head" hbank="63" lbank="8" prog="124" /> + <Patch name="Water Hit" hbank="63" lbank="3" prog="125" /> + <Patch name="Racer" hbank="63" lbank="8" prog="125" /> + <Patch name="Toukai" hbank="63" lbank="3" prog="126" /> + <Patch name="Expansion" hbank="63" lbank="9" prog="127" /> + </PatchGroup> + + <PatchGroup name="St"> + <Patch name="Hard Ens" hbank="63" lbank="1" prog="0" /> + <Patch name="BigStrings" hbank="63" lbank="1" prog="1" /> + <Patch name="MutedSect" hbank="63" lbank="1" prog="2" /> + <Patch name="BigSymphny" hbank="63" lbank="1" prog="3" /> + <Patch name="3 8ve Lush" hbank="63" lbank="1" prog="4" /> + <Patch name="PizzSect" hbank="63" lbank="1" prog="6" /> + <Patch name="Oct Pizz" hbank="63" lbank="1" prog="7" /> + <Patch name="Hard Ens" hbank="63" lbank="9" prog="23" /> + <Patch name="TremoloStr" hbank="0" lbank="0" prog="44" /> + <Patch name="Pizz" hbank="0" lbank="0" prog="45" /> + <Patch name="StereoSt1" hbank="0" lbank="0" prog="48" /> + <Patch name="StereoSt2" hbank="0" lbank="0" prog="49" /> + <Patch name="BackGround" hbank="63" lbank="9" prog="55" /> + <Patch name="StringPart" hbank="63" lbank="8" prog="71" /> + <Patch name="The Sneak" hbank="63" lbank="8" prog="72" /> + <Patch name="Pizz Arp" hbank="63" lbank="8" prog="73" /> + <Patch name="CelloEnsem" hbank="63" lbank="0" prog="119" /> + <Patch name="ViolaEnsem" hbank="63" lbank="0" prog="120" /> + <Patch name="ViolnEnsem" hbank="63" lbank="0" prog="121" /> + <Patch name="SmallSect" hbank="63" lbank="0" prog="122" /> + <Patch name="MediumEns" hbank="63" lbank="0" prog="123" /> + <Patch name="SpicaLines" hbank="63" lbank="0" prog="124" /> + <Patch name="Oct Pizz" hbank="63" lbank="9" prog="124" /> + <Patch name="BackGround" hbank="63" lbank="0" prog="125" /> + <Patch name="Hophead" hbank="63" lbank="0" prog="126" /> + <Patch name="Ens Mix" hbank="63" lbank="0" prog="127" /> + <Patch name="Violin 2" hbank="0" lbank="0" prog="40" /> + <Patch name="Viola 2" hbank="0" lbank="0" prog="41" /> + <Patch name="Cello 2" hbank="0" lbank="0" prog="42" /> + <Patch name="ContraBas2" hbank="0" lbank="0" prog="43" /> + <Patch name="Kokyu" hbank="63" lbank="1" prog="71" /> + <Patch name="Harp Arp" hbank="63" lbank="8" prog="74" /> + <Patch name="Violin 1" hbank="63" lbank="9" prog="87" /> + <Patch name="TronVln" hbank="63" lbank="3" prog="92" /> + <Patch name="Fiddle" hbank="0" lbank="0" prog="110" /> + <Patch name="Violin 1" hbank="63" lbank="0" prog="113" /> + <Patch name="Viola 1" hbank="63" lbank="0" prog="114" /> + <Patch name="Cello 1" hbank="63" lbank="0" prog="115" /> + <Patch name="Solo" hbank="63" lbank="0" prog="116" /> + <Patch name="SoloSpicat" hbank="63" lbank="0" prog="117" /> + <Patch name="ContraBas1" hbank="63" lbank="0" prog="118" /> + <Patch name="PWMStrings" hbank="63" lbank="1" prog="8" /> + <Patch name="Noble Pad" hbank="63" lbank="1" prog="9" /> + <Patch name="Stringy" hbank="63" lbank="1" prog="10" /> + <Patch name="MournStrgs" hbank="63" lbank="1" prog="11" /> + <Patch name="JP Strings" hbank="63" lbank="1" prog="12" /> + <Patch name="Superstrgs" hbank="63" lbank="1" prog="13" /> + <Patch name="StrMachine" hbank="63" lbank="9" prog="13" /> + <Patch name="VP Soft" hbank="63" lbank="1" prog="14" /> + <Patch name="PhaseStrgs" hbank="63" lbank="1" prog="15" /> + <Patch name="Oct String" hbank="63" lbank="1" prog="16" /> + <Patch name="3 Octave" hbank="63" lbank="1" prog="17" /> + <Patch name="StrMachine" hbank="63" lbank="1" prog="18" /> + <Patch name="TronStr" hbank="63" lbank="9" prog="29" /> + <Patch name="Grand Saw" hbank="0" lbank="0" prog="50" /> + <Patch name="SynString" hbank="0" lbank="0" prog="51" /> + <Patch name="TronStr" hbank="63" lbank="3" prog="91" /> + </PatchGroup> + + <PatchGroup name="Drums"> + <Patch name="Hyper Std" hbank="63" lbank="32" prog="0" /> + <Patch name="DryStandrd" hbank="63" lbank="32" prog="1" /> + <Patch name="NewRock" hbank="63" lbank="32" prog="2" /> + <Patch name="RockSt1" hbank="63" lbank="32" prog="3" /> + <Patch name="RockSt2" hbank="63" lbank="32" prog="4" /> + <Patch name="RockMono1" hbank="63" lbank="32" prog="5" /> + <Patch name="RockMono2" hbank="63" lbank="32" prog="6" /> + <Patch name="Hip Hop1" hbank="63" lbank="32" prog="7" /> + <Patch name="Hip Hop2" hbank="63" lbank="32" prog="8" /> + <Patch name="Hip Hop3" hbank="63" lbank="32" prog="9" /> + <Patch name="Hip Hop4" hbank="63" lbank="32" prog="10" /> + <Patch name="Hip Hop5" hbank="63" lbank="32" prog="11" /> + <Patch name="Hip Hop6" hbank="63" lbank="32" prog="12" /> + <Patch name="HipStick1" hbank="63" lbank="32" prog="13" /> + <Patch name="HipStick2" hbank="63" lbank="32" prog="14" /> + <Patch name="HipStick3" hbank="63" lbank="32" prog="15" /> + <Patch name="HipStick4" hbank="63" lbank="32" prog="16" /> + <Patch name="T9HipKit1" hbank="63" lbank="32" prog="17" /> + <Patch name="T9HipKit2" hbank="63" lbank="32" prog="18" /> + <Patch name="R-B Kit1" hbank="63" lbank="32" prog="19" /> + <Patch name="R-B Kit2" hbank="63" lbank="32" prog="20" /> + <Patch name="R-B Kit3" hbank="63" lbank="32" prog="21" /> + <Patch name="AnalogT9" hbank="63" lbank="32" prog="22" /> + <Patch name="AnalogT8" hbank="63" lbank="32" prog="23" /> + <Patch name="Tekno Kit" hbank="63" lbank="32" prog="24" /> + <Patch name="House Kit1" hbank="63" lbank="32" prog="25" /> + <Patch name="House Kit2" hbank="63" lbank="32" prog="26" /> + <Patch name="Big Kit" hbank="63" lbank="32" prog="27" /> + <Patch name="Break Kit" hbank="63" lbank="32" prog="28" /> + <Patch name="DrumnBass" hbank="63" lbank="32" prog="29" /> + <Patch name="Acid Kit" hbank="63" lbank="32" prog="30" /> + <Patch name="Jungle Kit" hbank="63" lbank="32" prog="31" /> + <Patch name="Electric" hbank="63" lbank="32" prog="32" /> + <Patch name="Human Kit" hbank="63" lbank="32" prog="33" /> + <Patch name="Hard Kit" hbank="63" lbank="32" prog="34" /> + <Patch name="Distorted" hbank="63" lbank="32" prog="35" /> + <Patch name="Ambient" hbank="63" lbank="32" prog="36" /> + <Patch name="Jazz Kit" hbank="63" lbank="32" prog="37" /> + <Patch name="Orchestral" hbank="63" lbank="32" prog="38" /> + <Patch name="Garage" hbank="63" lbank="32" prog="39" /> + <Patch name="All Round" hbank="63" lbank="32" prog="40" /> + <Patch name="Rock Multi" hbank="63" lbank="32" prog="41" /> + <Patch name="Hip Multi" hbank="63" lbank="32" prog="42" /> + <Patch name="Percussion" hbank="63" lbank="32" prog="43" /> + <Patch name="Latin Perc" hbank="63" lbank="32" prog="44" /> + <Patch name="Gtr/Bs Fx" hbank="63" lbank="32" prog="45" /> + <Patch name="Wacko Kit" hbank="63" lbank="32" prog="46" /> + <Patch name="Wood Bits" hbank="63" lbank="32" prog="47" /> + <Patch name="Metal Bits" hbank="63" lbank="32" prog="48" /> + <Patch name="Hands Kit" hbank="63" lbank="32" prog="49" /> + <Patch name="Scratches" hbank="63" lbank="32" prog="50" /> + <Patch name="AcstSnares" hbank="63" lbank="32" prog="51" /> + <Patch name="StSnares" hbank="63" lbank="32" prog="52" /> + <Patch name="AllKicks" hbank="63" lbank="32" prog="53" /> + <Patch name="DanceKick" hbank="63" lbank="32" prog="54" /> + <Patch name="EasySnares" hbank="63" lbank="32" prog="55" /> + <Patch name="Cuban" hbank="63" lbank="32" prog="56" /> + <Patch name="SynPopKit" hbank="63" lbank="32" prog="57" /> + <Patch name="Arabic Mix" hbank="63" lbank="32" prog="58" /> + <Patch name="BellyDance" hbank="63" lbank="32" prog="59" /> + <Patch name="DanceSnare" hbank="63" lbank="32" prog="60" /> + <Patch name="SpecialSFX" hbank="63" lbank="32" prog="61" /> + <Patch name="Synthetic" hbank="63" lbank="32" prog="62" /> + <Patch name="SFX Kit" hbank="63" lbank="32" prog="63" /> + <Patch name="Stereo GM" hbank="127" lbank="0" prog="0" /> + </PatchGroup> + + <PatchGroup name="PerfUser"> + <Patch name="Voice Name" hbank="" lbank="" prog="Number" /> + <Patch name="Prologue" hbank="63" lbank="64" prog="0" /> + <Patch name="Ariane" hbank="63" lbank="64" prog="1" /> + <Patch name="Lo-LoRider" hbank="63" lbank="64" prog="2" /> + <Patch name="Ganesha" hbank="63" lbank="64" prog="3" /> + <Patch name="DJ" hbank="63" lbank="64" prog="4" /> + <Patch name="DivaHaus" hbank="63" lbank="64" prog="5" /> + <Patch name="RBallad" hbank="63" lbank="64" prog="6" /> + <Patch name="LunarBeams" hbank="63" lbank="64" prog="7" /> + <Patch name="Nasca" hbank="63" lbank="64" prog="8" /> + <Patch name="Flamenco" hbank="63" lbank="64" prog="9" /> + <Patch name="ChillnKeys" hbank="63" lbank="64" prog="10" /> + <Patch name="Intruder" hbank="63" lbank="64" prog="11" /> + <Patch name="Prayer" hbank="63" lbank="64" prog="12" /> + <Patch name="Mr.Rock" hbank="63" lbank="64" prog="13" /> + <Patch name="Yearning" hbank="63" lbank="64" prog="14" /> + <Patch name="Galaxy" hbank="63" lbank="64" prog="15" /> + <Patch name="The Core" hbank="63" lbank="64" prog="16" /> + <Patch name="Stockholm" hbank="63" lbank="64" prog="17" /> + <Patch name="MoreBling" hbank="63" lbank="64" prog="18" /> + <Patch name="HIP" hbank="63" lbank="64" prog="19" /> + <Patch name="BreakTranz" hbank="63" lbank="64" prog="20" /> + <Patch name="BottomLine" hbank="63" lbank="64" prog="21" /> + <Patch name="SoulStrngz" hbank="63" lbank="64" prog="22" /> + <Patch name="Dronic" hbank="63" lbank="64" prog="23" /> + <Patch name="Pacific" hbank="63" lbank="64" prog="24" /> + <Patch name="Campfire1" hbank="63" lbank="64" prog="25" /> + <Patch name="MilesAway" hbank="63" lbank="64" prog="26" /> + <Patch name="Machine" hbank="63" lbank="64" prog="27" /> + <Patch name="Mr.Lectro" hbank="63" lbank="64" prog="28" /> + <Patch name="MetalHeavy" hbank="63" lbank="64" prog="29" /> + <Patch name="India?" hbank="63" lbank="64" prog="30" /> + <Patch name="Rushing" hbank="63" lbank="64" prog="31" /> + <Patch name="NeonZone" hbank="63" lbank="64" prog="32" /> + <Patch name="Over Sun" hbank="63" lbank="64" prog="33" /> + <Patch name="Lama" hbank="63" lbank="64" prog="34" /> + <Patch name="StreetBeat" hbank="63" lbank="64" prog="35" /> + <Patch name="The Pusher" hbank="63" lbank="64" prog="36" /> + <Patch name="FunkyHouse" hbank="63" lbank="64" prog="37" /> + <Patch name="forplay" hbank="63" lbank="64" prog="38" /> + <Patch name="Powerdrive" hbank="63" lbank="64" prog="39" /> + <Patch name="Kurofune" hbank="63" lbank="64" prog="40" /> + <Patch name="StrumComp" hbank="63" lbank="64" prog="41" /> + <Patch name="Chilly" hbank="63" lbank="64" prog="42" /> + <Patch name="Hexad" hbank="63" lbank="64" prog="43" /> + <Patch name="Charm" hbank="63" lbank="64" prog="44" /> + <Patch name="Alterno" hbank="63" lbank="64" prog="45" /> + <Patch name="Masala" hbank="63" lbank="64" prog="46" /> + <Patch name="WildMotion" hbank="63" lbank="64" prog="47" /> + <Patch name="DBFusion" hbank="63" lbank="64" prog="48" /> + <Patch name=" Up" hbank="63" lbank="64" prog="49" /> + <Patch name="Maguena" hbank="63" lbank="64" prog="50" /> + <Patch name="Phono-" hbank="63" lbank="64" prog="51" /> + <Patch name="Trance m" hbank="63" lbank="64" prog="52" /> + <Patch name="HouseDat" hbank="63" lbank="64" prog="53" /> + <Patch name="FunkGuys" hbank="63" lbank="64" prog="54" /> + <Patch name="ElctrcShuf" hbank="63" lbank="64" prog="55" /> + <Patch name="Specimen" hbank="63" lbank="64" prog="56" /> + <Patch name="Campfire2" hbank="63" lbank="64" prog="57" /> + <Patch name="Trancy" hbank="63" lbank="64" prog="58" /> + <Patch name="bigdirty" hbank="63" lbank="64" prog="59" /> + <Patch name="Cubic" hbank="63" lbank="64" prog="60" /> + <Patch name="HeavyJam" hbank="63" lbank="64" prog="61" /> + <Patch name="UduFlootu" hbank="63" lbank="64" prog="62" /> + <Patch name="Ice Age" hbank="63" lbank="64" prog="63" /> + <Patch name="Juggernaut" hbank="63" lbank="65" prog="64" /> + <Patch name="Pizzy Ln" hbank="63" lbank="65" prog="65" /> + <Patch name="Hip Hump" hbank="63" lbank="65" prog="66" /> + <Patch name="Warpman" hbank="63" lbank="65" prog="67" /> + <Patch name="2nd Floor" hbank="63" lbank="65" prog="68" /> + <Patch name="4theFloor" hbank="63" lbank="65" prog="69" /> + <Patch name="RBallad 2" hbank="63" lbank="65" prog="70" /> + <Patch name="Latechno" hbank="63" lbank="65" prog="71" /> + <Patch name="SmallWing" hbank="63" lbank="65" prog="72" /> + <Patch name="Salvador" hbank="63" lbank="65" prog="73" /> + <Patch name="AtomDance" hbank="63" lbank="65" prog="74" /> + <Patch name="Un-Normal" hbank="63" lbank="65" prog="75" /> + <Patch name="Planet" hbank="63" lbank="65" prog="76" /> + <Patch name="Rockey" hbank="63" lbank="65" prog="77" /> + <Patch name="HellishVox" hbank="63" lbank="65" prog="78" /> + <Patch name="BugChill" hbank="63" lbank="65" prog="79" /> + <Patch name="Spicy Step" hbank="63" lbank="65" prog="80" /> + <Patch name="Ice" hbank="63" lbank="65" prog="81" /> + <Patch name="Hip-Str" hbank="63" lbank="65" prog="82" /> + <Patch name="Raggamuff" hbank="63" lbank="65" prog="83" /> + <Patch name="HardTrance" hbank="63" lbank="65" prog="84" /> + <Patch name="Deep House" hbank="63" lbank="65" prog="85" /> + <Patch name="SpaceRnB" hbank="63" lbank="65" prog="86" /> + <Patch name="Reykjavik" hbank="63" lbank="65" prog="87" /> + <Patch name="Under Sea" hbank="63" lbank="65" prog="88" /> + <Patch name="GitBallad" hbank="63" lbank="65" prog="89" /> + <Patch name="MistyLands" hbank="63" lbank="65" prog="90" /> + <Patch name="Glitchit" hbank="63" lbank="65" prog="91" /> + <Patch name="Aztecan" hbank="63" lbank="65" prog="92" /> + <Patch name="VntgeRock" hbank="63" lbank="65" prog="93" /> + <Patch name="magellan" hbank="63" lbank="65" prog="94" /> + <Patch name="Deep Space" hbank="63" lbank="65" prog="95" /> + <Patch name="X-Circuit" hbank="63" lbank="65" prog="96" /> + <Patch name="5th Dream" hbank="63" lbank="65" prog="97" /> + <Patch name="Buddha" hbank="63" lbank="65" prog="98" /> + <Patch name="BuzzFunk" hbank="63" lbank="65" prog="99" /> + <Patch name="N-tranzd" hbank="63" lbank="65" prog="100" /> + <Patch name="Garage" hbank="63" lbank="65" prog="101" /> + <Patch name="PapaGroove" hbank="63" lbank="65" prog="102" /> + <Patch name="nanospace" hbank="63" lbank="65" prog="103" /> + <Patch name="Simmer" hbank="63" lbank="65" prog="104" /> + <Patch name="The Piper" hbank="63" lbank="65" prog="105" /> + <Patch name="Illusions" hbank="63" lbank="65" prog="106" /> + <Patch name="Dreampulse" hbank="63" lbank="65" prog="107" /> + <Patch name="Julianas" hbank="63" lbank="65" prog="108" /> + <Patch name="CountryRck" hbank="63" lbank="65" prog="109" /> + <Patch name="Hindu" hbank="63" lbank="65" prog="110" /> + <Patch name="Devilish" hbank="63" lbank="65" prog="111" /> + <Patch name="NuJazz" hbank="63" lbank="65" prog="112" /> + <Patch name="Helsinki" hbank="63" lbank="65" prog="113" /> + <Patch name="LiquidBeat" hbank="63" lbank="65" prog="114" /> + <Patch name="Trip Hop" hbank="63" lbank="65" prog="115" /> + <Patch name="tooltrance" hbank="63" lbank="65" prog="116" /> + <Patch name="GodMorning" hbank="63" lbank="65" prog="117" /> + <Patch name="RB 2003" hbank="63" lbank="65" prog="118" /> + <Patch name="Happy hour" hbank="63" lbank="65" prog="119" /> + <Patch name="Venus Flai" hbank="63" lbank="65" prog="120" /> + <Patch name="SmallBand" hbank="63" lbank="65" prog="121" /> + <Patch name="Galilean" hbank="63" lbank="65" prog="122" /> + <Patch name="network" hbank="63" lbank="65" prog="123" /> + <Patch name="Blpzkrieg" hbank="63" lbank="65" prog="124" /> + <Patch name="9Ft.Hammrz" hbank="63" lbank="65" prog="125" /> + <Patch name="Istanbul" hbank="63" lbank="65" prog="126" /> + <Patch name="Iceberg" hbank="63" lbank="65" prog="127" /> + </PatchGroup> + + + <Controller name="Modulation" l="1" init="0" /> + <Controller name="PortamentoTime" l="5" /> + <Controller name="Main Volume" l="7" init="100" /> + <Controller name="Foot Pedal" l="4" /> + <Controller name="Pan" l="10" min="-64" max="63" init="0" /> + <Controller name="Expression" l="11" init="0" /> + <Controller name="Brightness" l="74" min="-64" max="63" init="0" /> + + </MidiInstrument> +</muse> |