summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--muse2/ChangeLog7
-rw-r--r--muse2/awl/posedit.cpp2
-rw-r--r--muse2/muse/CMakeLists.txt1
-rw-r--r--muse2/muse/app.cpp280
-rw-r--r--muse2/muse/app.h5
-rw-r--r--muse2/muse/conf.cpp3
-rw-r--r--muse2/muse/dssihost.cpp27
-rw-r--r--muse2/muse/gconfig.cpp3
-rw-r--r--muse2/muse/gconfig.h1
-rw-r--r--muse2/muse/marker/marker.h2
-rw-r--r--muse2/muse/master/lmaster.cpp4
-rw-r--r--muse2/muse/midiedit/scoreedit.cpp80
-rw-r--r--muse2/muse/midiedit/scoreedit.h1
-rw-r--r--muse2/muse/part.h1
-rw-r--r--muse2/muse/plugin.cpp21
-rw-r--r--muse2/muse/song.cpp160
-rw-r--r--muse2/muse/song.h4
-rw-r--r--muse2/muse/songfile.cpp3
-rw-r--r--muse2/muse/structure.cpp368
-rw-r--r--muse2/muse/undo.cpp30
-rw-r--r--muse2/muse/widgets/genset.cpp19
-rw-r--r--muse2/muse/widgets/gensetbase.ui147
-rw-r--r--muse2/muse/widgets/musewidgetsplug.cpp4
-rw-r--r--muse2/muse/widgets/songinfo.ui7
-rw-r--r--muse2/share/instruments/yam_mo6_v3.idf1290
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>